【发布时间】:2016-12-29 07:32:51
【问题描述】:
我在 django 中有一个 HTML 模板。它有两个变量:类别列表(查询集,它由 django 模型上的.objects.all() 函数返回)和参赛者字典。作为字典的键,我使用类别的 id,值是参赛者列表。
我想打印类别的名称,然后是所有参赛者。现在我有了这个:
{% for category in categories_list %}
<h1>category.category_name</h1>
{% for contestant in contestants_dict[category.id] %}
{{ contestant }} </br>
{% endfor %}
{% endfor %}
但是,当我运行它时,我得到了错误:
TemplateSyntaxError at /olympiada/contestants/
Could not parse the remainder: '[category.id]' from 'contestants_dict[category.id]'
到目前为止我所知道的是我不能在模板中使用索引。我认为{% something %} 包含纯Python,但它推高了它只是一个标签。我知道我必须创建自己的 simple_tag,但我不知道如何。我阅读了文档Writing custom template tags,但是信息很少,我无法弄清楚如何创建(主要在 for 循环中使用)标签,该标签将采用 dict、key 并返回值。我尝试的是:
模板标签/custom_tags.py:
from django import template
register = template.Library()
@register.simple_tag
def list_index(a, b):
return a[b]
在模板中:
{% for contestant in list_index contestants_dict category.id %}
但是我得到了 TemplateSyntaxError。 您能否解释/告诉我如何创建标签,或者有更好的方法吗? 谢谢。
//编辑: 我设法做到了:
{% list_index contestants_list category.id as cont %}
{% for contestant in cont %}
它有效,但它需要 2 行,我需要创建另一个变量。没有它有什么办法吗?
【问题讨论】:
-
使用过滤器代替标签。