Concaténation de ficelles en Jinja

je veux simplement passer en boucle une liste existante et en faire une chaîne délimitée par une virgule.

Quelque chose comme ceci: my_string = 'stuff, stuff, stuff, stuff'

je sais déjà à propos de loop.last, j'ai juste besoin de savoir comment faire fonctionner la troisième ligne de mon code ci-dessous.

{% set my_string = '' %}
{% for stuff in stuffs %}
{% set my_string = my_string + stuff + ', '%}
{% endfor%}
26
demandé sur bernie 2010-01-14 03:41:16

4 réponses

Si stuffs est une liste de chaînes de caractères, tout cela devrait fonctionner:

{{ stuffs|join(", ") }}

Lien à la documentation.

52
répondu bernie 2010-01-14 03:22:28

Mon mal, en essayant de simplifier, je suis allé trop loin, en fait stuffs est un enregistrement de toutes sortes d'informations, je veux juste l'id dedans.

stuffs = [[123, first, last], [456, first, last]]

je veux my_sting

my_sting = '123, 456'

Mon code devrait ressembler à ceci:

{% set my_string = '' %}
{% for stuff in stuffs %}
{% set my_string = my_string + stuff.id + ', '%}
{% endfor%}

Penser stuffs est probablement un dictionnaire, mais vous obtenez l'essentiel.

Oui j'ai trouvé l' join filtre, et allait l'aborder comme ceci:

 {% set my_string = [] %}
 {% for stuff in stuffs %}
 {% do my_string.append(stuff.id) %}
 {% endfor%}
 {%  my_string|join(', ') %}

Mais de l'ajouter ne fonctionne pas sans importer les extensions pour le faire, et la lecture de cette documentation m'a donné un mal de tête. Il ne dit pas explicitement où l'importer ou même où vous mettriez la déclaration d'importation, donc je me suis dit que trouver un moyen de concat serait le moindre des deux maux.

5
répondu KacieHouser 2016-10-26 04:10:26

juste un autre piratage peut être comme ça.

j'ai un tableau de chaînes que je dois concaténer. J'ai donc ajouté ce tableau dans le dictionnaire, puis utilisé à l'intérieur de la boucle qui a fonctionné.

{% set dict1 = {'e':''} %}
{% for i in list1 %}
{% if dict1.update({'e':dict1.e+":"+i+"/"+i}) %} {% endif %}
{% endfor %}
{% set layer_string = dict1['e'] %}
0
répondu Kapil 2016-07-19 18:36:44

si vous ne pouvez pas simplement utiliser la jointure de filtre mais avez besoin d'effectuer quelques opérations sur l'entrée du tableau:

{% for entry in array %}
User {{ entry.attribute1 }} has id {{ entry.attribute2 }}
{% if not loop.last %}, {% endif %}
{% endfor %}
0
répondu Jakub N 2017-12-19 15:21:02