web-dev-qa-db-ja.com

jinja pythonテンプレートでコンマ区切りリストを出力する方法は?

users say ["Sam", "Bob", "Joe"]のリストがある場合は、jinjaテンプレートファイルで出力できる場所で何かを実行します。

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

出力テンプレートを次のようにしたい:

Sam, Bob, Joe

上記のコードを試して、ループの最後の反復にあるかどうかを確認し、そうでない場合はコンマを挿入しませんが、機能しません。どうすればいいですか?

146
Rolando

ifチェックを次のようにします。

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

If式 を使用してコードを短縮することもできます。

{{ "," if not loop.last }}
241
Joe Day

組み込みの「結合」フィルターを使用することもできます( http://jinja.pocoo.org/docs/templates/#join このように:

{{ users|join(', ') }}
166
Uli Martens

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 %}
57
dalore