我正在渲染一些表,这些表将添加到视图的上下文中
from .models import MyModel
from .tables import MyModelTable
def index(request):
context = dict(all_tables=[])
template = 'mypage/index.html'
for x in some_list:
if some_condition(x):
context[x] = MyModelTable(get_some_data(x))
context['all_tables'].append(x)
context['all_tables'] = sort_my_way(context['all_tables'])
return render(request, template, context)
然后我尝试遍历列表,并逐个创建表。但是,我无法弄清楚如何使用字符串名称从上下文中获取表。
index.html
{% load django_tables2 %}
{% load render_table from django_tables2 %}
<!doctype html>
<html>
<link rel="stylesheet" href="{% static 'css/my.css' %}" />
<body>
{% for t in all_tables %}
{% if t %}
<H3>{{ t }}</H3>
{% render_table t %} <--- How can I get the table with name t from context
<br/>
{% endif %}
{% endfor %}
</body>
我在这里要做的是避免自己进入index.html中的大量列表
{% if TABLE_1 %}
<H3>TABLE_1 </H3>
{% render_table TABLE_1 %}
<br/>
{% endif %}
....
{% if TABLE_N %}
<H3>TABLE_N </H3>
{% render_table TABLE_N %}
<br/>
{% endif %}
答案 0 :(得分:3)
与其将表名列表与上下文中的表对象分开,不如让它们更紧密地关联在一起,以使模板中的事情变得更容易。
例如,创建表时,可以使用元组将其及其名称添加到all_tables
列表中:
for x in some_list:
if some_condition(x):
named_table = (x, MyModelTable(get_some_data(x)))
context['all_tables'].append(named_table)
您没有显示sort_my_way()
,但是对context['all_tables']
和sorted()
的{{1}}中的元组列表进行排序将继续正常工作。但是,如果需要,您可以使用key函数轻松地对其进行自定义。
然后,您可以在模板中遍历表名和表本身,而无需任何额外的查找:
list.sort()
答案 1 :(得分:1)
目前尚不清楚您视图中的x
与模板中的t
之间的链接是什么...
根据建立索引的方式,您可以尝试:
{% for x, t in all_tables.items %}
...
{% render_table context.x %}
...
{% endfor %}
或者那样。