有条件地加入Jinja中的字符串列表

时间:2014-06-04 15:44:08

标签: python jinja2

我有一个像

这样的清单
users = ['tom', 'dick', 'harry']

Jinja模板中,我想打印除tom加入之外的所有用户的列表。我无法在将变量传递给模板之前对其进行修改。

我尝试了列表理解,并使用了Jinja的reject过滤器,但是我无法使这些过滤器工作,例如

{{ [name for name in users if name != 'tom'] | join(', ') }}

给出语法错误。

如何有条件地加入列表项?

3 个答案:

答案 0 :(得分:16)

使用reject过滤器sameas测试:

>>> 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)

&#34;等于&#34;的另一种解决方案测试代替&#34; sameas&#34;

使用reject过滤器equalto测试:

>>> import jinja2
>>> template = jinja2.Template("{{ items|reject('equalto', 'aa')|join(',') }}")
>>> template.render(users=['aa', 'bb', 'cc'])
u'bb,cc'