如果我有一个users
列表["Sam", "Bob", "Joe"]
,我想做一些可以在我的jinja模板文件中输出的内容:
{% for user in userlist %}
<a href="/profile/{{ user }}/">{{ user }}</a>
{% if !loop.last %}
,
{% endif %}
{% endfor %}
我想将输出模板设为:
Sam, Bob, Joe
我尝试了上面的代码来检查它是否在循环的最后一次迭代中,如果没有,那么不要插入逗号,但它不起作用。我该怎么做?
答案 0 :(得分:225)
您希望if
检查为:
{% if not loop.last %}
,
{% endif %}
请注意,您还可以使用If Expression:
来缩短代码{{ "," if not loop.last }}
答案 1 :(得分:156)
您还可以使用内置的“加入”过滤器(http://jinja.pocoo.org/docs/templates/#join,如下所示:
{{ users|join(', ') }}
答案 2 :(得分:56)
并使用http://jinja.pocoo.org/docs/dev/templates/#joiner
中的joiner
{% set comma = joiner(",") %}
{% for user in userlist %}
{{ comma() }}<a href="/profile/{{ user }}/">{{ user }}</a>
{% endfor %}
它是为了这个目的而制作的。通常情况下,对于单个列表,加入或检查forloop.last就足够了,但是对于多组事物来说它是有用的。
一个更复杂的例子,说明你使用它的原因。
{% set pipe = joiner("|") %}
{% if categories %} {{ pipe() }}
Categories: {{ categories|join(", ") }}
{% endif %}
{% if author %} {{ pipe() }}
Author: {{ author() }}
{% endif %}
{% if can_edit %} {{ pipe() }}
<a href="?action=edit">Edit</a>
{% endif %}
答案 3 :(得分:2)
以下代码使用jinja2 join filter的Uli Martens建议 在python3.5 shell中:
>>> users = ["Sam", "Bob", "Joe"]
>>> from jinja2 import Template
>>> template = Template("{{ users|join(', ') }}")
>>> template.render(users=users)
'Sam, Bob, Joe'