循环 Django 模板 simple_tag 返回字典

问题描述 投票:0回答:1

当使用返回字典的简单模板标签时:

@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 年后是否有更干净的方法来做到这一点,因为我不喜欢临时变量。

python django django-templates django-template-filters
1个回答
0
投票

不,你想要的实际上是不可能的。

{% tag ... %}
是模板标签的使用方式。当一个人写
{% for .... %}
时,他正在使用
for
模板标签

{% for type in get_types.values %}
行中,
get_types.values
被 Django 评估为表达式,它会在上下文中查找所需的任何变量。如果这允许我们也利用那里的其他模板标签,那么它是指模板标签还是变量就会很模糊。

如果您真的想要这个,另一种方法是创建

for
模板标签的替代品,并自行处理其他模板标签的所有解析和调用。如果您决定这样做,请参阅有关高级自定义模板标签的文档。在我看来,这只会增加复杂性,但价值却很小。按照您已经做的方式来做会更简单。

© www.soinside.com 2019 - 2024. All rights reserved.