我想在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的列表中返回唯一的项目?
答案 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将拥有该功能,您可以像使用它一样使用它