Se eu tiver uma lista , users
digamos ["Sam", "Bob", "Joe"]
, quero fazer algo em que possa produzir no meu arquivo de modelo jinja:
{% for user in userlist %}
<a href="/profile/{{ user }}/">{{ user }}</a>
{% if !loop.last %}
,
{% endif %}
{% endfor %}
Eu quero fazer o modelo de saída ser:
Sam, Bob, Joe
Eu tentei o código acima para verificar se estava na última iteração do loop e, se não, não insira uma vírgula, mas não funciona. Como eu faço isso?
!
como operador de negação. "not" está escrito "not".Respostas:
Você deseja que seu
if
cheque seja:Observe que você também pode reduzir o código usando If Expression :
fonte
{{ "," if not forloop.last }}
{{ "," if not loop.last else "" }}
você também pode usar o filtro "join" incorporado ( http://jinja.pocoo.org/docs/templates/#join assim:
fonte
ansible -i localhost, all -m debug -a "msg=\"{{ [ 'a','b','c' ]|join('X') }}\""
E usando a
joiner
partir http://jinja.pocoo.org/docs/dev/templates/#joinerÉ feito para esse propósito exato. Normalmente, uma junção ou uma verificação de forloop.last seria suficiente para uma única lista, mas para vários grupos de coisas é útil.
Um exemplo mais complexo sobre por que você o usaria.
fonte
O código a seguir funcionou usando o filtro de junção jinja2 que Uli Martens sugeriu no shell python3.5:
fonte