web-dev-qa-db-fra.com

Concaténation de cordes à Jinja

Je veux juste parcourir une liste existante et en faire une chaîne délimitée par des virgules.
Quelque chose comme ça: my_string = 'stuff, stuff, stuff, stuff'

Je connais déjà loop.last, je dois juste savoir comment faire la troisième ligne de mon code ci-dessous WORK.

{% set my_string = '' %}
{% for stuff in stuffs %}
{% set my_string = my_string + stuff + ', '%}
{% endfor%}
31
KacieHouser

Si stuffs est une liste de chaînes, cela fonctionnerait:

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

Lien à la documentation.

56
bernie

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

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

Je veux que my_sting soit 

my_sting = '123, 456'

Mon code original aurait dû ressembler à ceci:

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

En y réfléchissant, stuffs est probablement un dictionnaire, mais vous obtenez le Gist.

Oui, j'ai trouvé le filtre join et j'allais l'approcher comme suit:

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

Mais append ne fonctionne pas sans importer les extensions, et la lecture de cette documentation m'a donné mal à la tête. Il ne dit pas explicitement où importer ou même où vous placeriez la déclaration d'importation. J'ai donc pensé que trouver un moyen de concaténer serait le moindre des deux maux.

7
KacieHouser

Juste un autre hack peut être comme ça.

J'ai un tableau de chaînes que je dois concaténer. J'ai donc ajouté ce tableau au dictionnaire, puis je l'ai utilisé à l'intérieur d'une boucle qui fonctionnait.

{% set dict1 = {'e':''} %}
{% for i in list1 %}
{% if dict1.update({'e':dict1.e+":"+i+"/"+i}) %} {% endif %}
{% endfor %}
{% set layer_string = dict1['e'] %}
0
Kapil

Si vous ne pouvez pas simplement utiliser une jointure de filtre mais devez effectuer certaines 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
Jakub N