在Jinja中使用Python`set`关键字

时间:2016-09-03 13:17:44

标签: python jinja2

我想在Jinja模板中返回唯一的项目。简化为:

{% set lst = [1, 2, 3, 3, 2] %}
{% for t in set(lst) %}
    {{ t }}
{% endfor %}

但这引发了错误:

UndefinedError: 'set' is undefined

似乎很难在Google上找到答案,因为set也是Jinja关键字。 那么我可以在Jinja使用Python的set关键字,还是可以从Jinja的列表中返回唯一的项目?

2 个答案:

答案 0 :(得分:1)

如果您至少使用v. 2.10 jinja: 您可以使用内置过滤器unique

{% set lst = [1, 2, 3, 3, 2] %}
{% for t in lst|unique %}
    {{ t }}
{% endfor %}

如果您的 jinja版本为<2.10 ,则可以自己定义此过滤器:

@app.template_filter('unique')
def unique(s):
    return list(set(s))

您可以找到有关编写自定义Jinja过滤器here

的更多信息。

答案 1 :(得分:-3)

创建变量的集合是什么,因此当您使用set lst = 1时,您可以使用lst访问它,而不是set(lst)

编辑:被误解的问题,从jinja访问python函数,这是我在我的烧瓶应用程序中做的事情

@app.context_processor
def inject_python():
    return dict(set=set)

这样,jinja将拥有该功能,您可以像使用它一样使用它