233 votes

Comment sortir une liste délimitée par des virgules dans un modèle python jinja ?

Si j'ai une liste de users dites ["Sam", "Bob", "Joe"] Je veux faire quelque chose où je peux sortir dans mon fichier modèle Jinja :

{% for user in userlist %}
    <a href="stackoverflow.com/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 si non, alors ne pas insérer une virgule, mais cela ne fonctionne pas. Comment dois-je procéder ?

402voto

Joe Day Points 5794

Vous voulez que votre if vérifier pour être :

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

Notez que vous pouvez également raccourcir le code en utilisant Si l'expression :

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

241voto

Uli Martens Points 2511

Vous pouvez également utiliser le filtre intégré "join" ( http://jinja.pocoo.org/docs/templates/#join comme ça :

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

72voto

dalore Points 1029

Et en utilisant le joiner de https://jinja.palletsprojects.com/templates/#joiner

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

Il est fait dans ce but précis. Normalement, une jointure ou une vérification de forloop.last suffirait pour une seule liste, mais pour plusieurs groupes de choses, c'est utile.

Un exemple plus complexe sur la raison pour laquelle 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 %}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X