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

sky*_*ler 11 python jinja2

我有一个清单

users = ['tom', 'dick', 'harry']
Run Code Online (Sandbox Code Playgroud)

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

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

{{ [name for name in users if name != 'tom'] | join(', ') }}
Run Code Online (Sandbox Code Playgroud)

给出语法错误.

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

fal*_*tru 16

使用reject过滤器sameas测试:

>>> import jinja2
>>> template = jinja2.Template("{{ users|reject('sameas', 'tom')|join(',') }}")
>>> template.render(users=['tom', 'dick', 'harry'])
u'dick,harry'
Run Code Online (Sandbox Code Playgroud)

UPDATE

如果您使用的是Jinja 2.8+,请使用equalto而不是sameas@Dougal评论; sameas使用Python is进行equalto测试,同时使用==.


ben*_*les 8

这应该有效,因为不直接支持列表理解.当然,适当的过滤器会更好.

{% for name in users if name != 'tom'%}
    {{name}}
    {% if not loop.last %}
         {{','}}
    {% endif %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)