我有一个像
这样的清单users = ['tom', 'dick', 'harry']
在Jinja
模板中,我想打印除tom
加入之外的所有用户的列表。我无法在将变量传递给模板之前对其进行修改。
我尝试了列表理解,并使用了Jinja的reject
过滤器,但是我无法使这些过滤器工作,例如
{{ [name for name in users if name != 'tom'] | join(', ') }}
给出语法错误。
如何有条件地加入列表项?
答案 0 :(得分:16)
>>> import jinja2
>>> template = jinja2.Template("{{ users|reject('sameas', 'tom')|join(',') }}")
>>> template.render(users=['tom', 'dick', 'harry'])
u'dick,harry'
<强>更新强>
如果您使用的是Jinja 2.8+,请使用equalto
代替sameas
作为@Dougal评论;使用sameas
进行is
测试,equalto
进行==
测试。
答案 1 :(得分:8)
这应该有效,因为不直接支持列表理解。当然,适当的过滤器会更好。
{% for name in users if name != 'tom'%}
{{name}}
{% if not loop.last %}
{{','}}
{% endif %}
{% endfor %}
答案 2 :(得分:1)