Если у меня есть список, users
скажем ["Sam", "Bob", "Joe"]
, я хочу сделать что-то, что я могу вывести в мой файл шаблона jinja:
{% for user in userlist %}
<a href="/profile/{{ user }}/">{{ user }}</a>
{% if !loop.last %}
,
{% endif %}
{% endfor %}
Я хочу, чтобы шаблон вывода был:
Sam, Bob, Joe
Я попробовал приведенный выше код, чтобы проверить, был ли он на последней итерации цикла, а если нет, то не вставляйте запятую, но это не работает. Как мне это сделать?
!
в качестве оператора отрицания. «не» пишется «не».Ответы:
Вы хотите, чтобы ваш
if
чек был:Обратите внимание, что вы также можете сократить код, используя выражение If :
источник
{{ "," if not forloop.last }}
{{ "," if not loop.last else "" }}
Вы также можете использовать встроенный фильтр "join" ( http://jinja.pocoo.org/docs/templates/#join вот так:
источник
ansible -i localhost, all -m debug -a "msg=\"{{ [ 'a','b','c' ]|join('X') }}\""
И используя
joiner
из http://jinja.pocoo.org/docs/dev/templates/#joinerЭто сделано именно для этой цели. Обычно объединения или проверки forloop.last достаточно для одного списка, но для нескольких групп вещей это полезно.
Более сложный пример того, почему вы бы его использовали.
источник
Следующий код работал с использованием фильтра соединения jinja2, предложенного Ули Мартенсом в оболочке python3.5:
источник