Как вывести список с разделителями-запятыми в шаблоне jinja python?


если у меня есть список users сказать ["Sam", "Bob", "Joe"], Я хочу сделать что-то, где я могу вывести в моем файле шаблона jinja:

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

Я хочу, чтобы выходной шаблон был:

Sam, Bob, Joe

я попробовал приведенный выше код, чтобы проверить, был ли он на последней итерации цикла, а если нет, то не вставляйте запятую, но это не работает. Как мне это сделать?

3 112

3 ответа:

вы хотите, чтобы ваш if в:

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

обратите внимание, что вы можете сократить код, используя Если Выражение:

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

вы также можете использовать встроенный фильтр" join " (http://jinja.pocoo.org/docs/templates/#join Вот так:

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

и с помощью joiner от http://jinja.pocoo.org/docs/dev/templates/#joiner

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

это сделано именно для этой цели. Обычно соединение или проверка forloop.последнее было бы достаточно для одного списка, но для нескольких групп вещей это полезно.

более сложный пример того, почему вы его используете.

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