django 如何按名称获取上下文项
django how to get context item by name
我正在渲染一些 table,我将它们添加到视图的上下文中
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)
然后我尝试遍历列表并逐一创建 table。但是,我不知道如何使用字符串名称从上下文中获取 table。
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 %}
不清楚您视图中的 x
和模板中的 t
之间的 link 是什么...
根据您构建索引的方式,您可以尝试:
{% for x, t in all_tables.items %}
...
{% render_table context.x %}
...
{% endfor %}
或者诸如此类。
与其将 table 名称列表与上下文中的 table 对象分开,不如让它们更紧密地关联起来,这样模板中的事情就更容易了。
例如,当您创建 table 时,您可以使用元组将其连同其名称一起添加到 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']
中的元组列表进行排序将继续按预期使用 Python 的 sorted()
和 [=16] =].但如果需要,您可以使用 key 函数轻松自定义它。
然后在您的模板中,您可以遍历 table 的名称和 table 本身,而无需任何额外的查找:
{% for name, table in all_tables %}
{% if name %}
<H3>{{ name }}</H3>
{% render_table table %}
<br/>
{% endif %}
{% endfor %}
我正在渲染一些 table,我将它们添加到视图的上下文中
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)
然后我尝试遍历列表并逐一创建 table。但是,我不知道如何使用字符串名称从上下文中获取 table。
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 %}
不清楚您视图中的 x
和模板中的 t
之间的 link 是什么...
根据您构建索引的方式,您可以尝试:
{% for x, t in all_tables.items %}
...
{% render_table context.x %}
...
{% endfor %}
或者诸如此类。
与其将 table 名称列表与上下文中的 table 对象分开,不如让它们更紧密地关联起来,这样模板中的事情就更容易了。
例如,当您创建 table 时,您可以使用元组将其连同其名称一起添加到 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']
中的元组列表进行排序将继续按预期使用 Python 的 sorted()
和 [=16] =].但如果需要,您可以使用 key 函数轻松自定义它。
然后在您的模板中,您可以遍历 table 的名称和 table 本身,而无需任何额外的查找:
{% for name, table in all_tables %}
{% if name %}
<H3>{{ name }}</H3>
{% render_table table %}
<br/>
{% endif %}
{% endfor %}