Si j'ai une liste de users
dis ["Sam", "Bob", "Joe"]
, Je veux faire quelque chose pour lequel je peux sortir dans mon fichier de modèle jinja:
{% for user in userlist %}
<a href="/profile/{{ user }}/">{{ user }}</a>
{% if !loop.last %}
,
{% endif %}
{% endfor %}
Je veux que le modèle de sortie soit:
Sam, Bob, Joe
J'ai essayé le code ci-dessus pour vérifier si c'était sur la dernière itération de la boucle et sinon, n'insérez pas de virgule, mais cela ne fonctionne pas. Comment puis-je faire cela?
Vous voulez que votre chèque if
soit:
{% if not loop.last %}
,
{% endif %}
Notez que vous pouvez également raccourcir le code en utilisant If Expression :
{{ "," if not loop.last }}
vous pouvez aussi utiliser le filtre "join" intégré ( http://jinja.pocoo.org/docs/templates/#join comme ceci:
{{ users|join(', ') }}
Et en utilisant le joiner
de http://jinja.pocoo.org/docs/dev/templates/#joiner
{% set comma = joiner(",") %}
{% for user in userlist %}
{{ comma() }}<a href="/profile/{{ user }}/">{{ user }}</a>
{% endfor %}
C'est fait dans ce but précis. Normalement, une jointure ou une vérification de forloop.last suffirait pour une liste unique, mais elle serait utile pour plusieurs groupes de choses.
Un exemple plus complexe expliquant pourquoi vous l'utiliseriez.
{% 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 %}