2012-08-15 65 views
89

如果我有users列表說["Sam", "Bob", "Joe"],我想要做的事,我可以在我的神社模板文件輸出:如何在jinja python模板中輸出逗號分隔的列表?

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

我想使輸出模板是:

Sam, Bob, Joe 

我嘗試了上面的代碼來檢查它是否在循環的最後一次迭代,如果不是,那麼不要插入逗號,但它不起作用。我該怎麼做呢?

+0

像Python一樣,jinja不使用'!'作爲否定運算符。 「不」是拼寫「不」。 – geoffspear 2012-08-15 17:49:40

回答

150

您希望您的if檢查是:

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

請注意,您還可以通過使用If Expression縮短代碼:

{{ "," if not loop.last }} 
+1

這真棒,尤其是在HTML循環結束時 – Sinux 2015-08-27 14:38:35

+0

非常乾淨簡潔! – 2017-09-19 23:19:43

+3

只是fyi,您可能需要根據您的設置將其設置爲if/else。更多信息。可以在這裏找到:https://github.com/pallets/jinja/issues/710 – 2017-09-19 23:24:21

107

你也可以使用內置的「加盟」過濾器(http://jinja.pocoo.org/docs/templates/#join像這樣:

{{ users|join(', ') }} 
+1

雖然這適用於創建一個CSV,看到他上面的例子,它不能與周圍的錨點一起使用。 – triunenature 2015-11-22 06:18:00

+0

此方法也不適用於轉義: ['{{['a'','b'] | join('','「)}}'] 產生 ['a ' ', ' b'] – stewbasic 2015-11-24 03:34:21

+0

這應該是第一件嘗試。如果它不能按要求工作,那麼嘗試另一種解決方案,但這絕對是最乾淨的。 – Jerad 2017-07-22 15:40:48

44

而且使用joinerhttp://jinja.pocoo.org/docs/dev/templates/#joiner

{% set comma = joiner(",") %} 
{% for user in userlist %} 
    {{ comma() }}<a href="/profile/{{ user }}/">{{ user }}</a> 
{% endfor %} 

它是由這一確切目的。

+0

這實際上對我來說很好,沒有留下尾隨的逗號。感謝這個! – 2017-12-19 12:49:33