当使用返回字典的简单模板标签时:
@register.simple_tag
def get_types():
return {
"item1": "Foo",
"item2": "Bar",
}
这不会打印任何列:
{% for type in get_types.values %}
<th>{{ type }}</th>
{% endfor %}
虽然这样做:
{% get_types as types %}
{% for type in types.values %}
<th>{{ type }}</th>
{% endfor %}
有没有办法让它工作而不必放置临时变量
{% get_types as types %}
?我在 StackOverflow 或论坛中发现的大多数问题都是 2018 年或更早的问题。我想知道 6 年后是否有更干净的方法来做到这一点,因为我不喜欢临时变量。
不,你想要的实际上是不可能的。
{% tag ... %}
是模板标签的使用方式。当一个人写 {% for .... %}
时,他正在使用 for
模板标签。
在
{% for type in get_types.values %}
行中,get_types.values
被 Django 评估为表达式,它会在上下文中查找所需的任何变量。如果这允许我们也利用那里的其他模板标签,那么它是指模板标签还是变量就会很模糊。
如果您真的想要这个,另一种方法是创建
for
模板标签的替代品,并自行处理其他模板标签的所有解析和调用。如果您决定这样做,请参阅有关高级自定义模板标签的文档。在我看来,这只会增加复杂性,但价值却很小。按照您已经做的方式来做会更简单。