如何在jinja python模板中输出逗号分隔的列表?

如果我有一个users的列表,比如["Sam", "Bob", "Joe"],我想做一些事情,在我的jinja模板文件中输出:

{% for user in userlist %}
<a href="/profile/{{ user }}/">{{ user }}</a>
{% if !loop.last %}
,
{% endif %}
{% endfor %}

我想让输出模板是:

Sam, Bob, Joe

我尝试了上面的代码来检查它是否在循环的最后一次迭代中,如果不是,那么就不要插入逗号,但它不起作用。我怎么做呢?

157571 次浏览

你希望你的if检查是:

{% if not loop.last %}
,
{% endif %}

注意,你也可以通过使用如果表达式来缩短代码:

\{\{ ", " if not loop.last else "" }}

你也可以像这样使用内置的join过滤器:

\{\{ users|join(', ') }}

并使用https://jinja.palletsprojects.com/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 %}