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

时间:2012-08-15 17:43:18

标签: python jinja2

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

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

我想将输出模板设为:

Sam, Bob, Joe

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

4 个答案:

答案 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'