228

たとえばのリストがある場合は、jinjaテンプレートファイルに出力できるようなことをしusersたい["Sam", "Bob", "Joe"]と思います。

{% 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

そしてhttps://jinja.palletsprojects.com/templates/#joinerjoinerから

{% 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 に答える