228

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

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

我想让输出模板为:

Sam, Bob, Joe

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

4

3 回答 3

397

你希望你的if支票是:

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

请注意,您还可以使用If Expression缩短代码:

{{ ", " if not loop.last else "" }}
于 2012-08-15T17:49:34.080 回答
236

你也可以使用内置的“加入”过滤器(http://jinja.pocoo.org/docs/templates/#join像这样:

{{ users|join(', ') }}
于 2014-04-03T08:04:44.957 回答
68

并使用joiner来自https://jinja.palletsprojects.com/templates/#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 %}
于 2015-11-26T14:15:39.130 回答