2010-01-14 4 views
22

Je veux juste parcourir une liste existante et en faire une chaîne délimitée par des virgules.
Quelque chose comme ceci: my_string = 'stuff, stuff, stuff, stuff'Chaîne de concaténation dans Jinja

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

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

OK que le code d'origine que j'ai posté des œuvres, je l'avais dans {{}} en mon code actuel au lieu de {%%} J'ai cherché et cherché la meilleure façon de l'approcher et les choses à ma disposition pour le faire, et c'était à la fin de la journée dans la nuit, alors que {{} } a glissé dans ma frustration. Merci pour la réponse si bien – KacieHouser

Répondre

42

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

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

Link à la documentation.

+0

- je ne pouvais pas trouver cela dans les docs. – doug

+6

N'oubliez pas d'utiliser ~ au lieu de + [comme indiqué ici] (http://jinja.pocoo.org/docs/templates/#other-operators) – Josmar

3

Mon mauvais, 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'id dedans.

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

Je veux my_sting être

my_sting = '123, 456' 

Mon code d'origine devrait ressembler à ceci:

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

En y repensant, stuffs est probablement un dictionnaire, mais vous obtenez l'essentiel .

Oui, je trouve le filtre join, et allait l'aborder comme ceci:

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

Mais l'append ne fonctionne pas sans importer les extensions de 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, alors j'ai pensé que trouver un moyen de concaténation serait le moindre des deux maux.

+3

Depuis la version 2.6, vous pouvez sélectionner un attribut dans le filtre de jointure. Donc vous pouvez faire {{stuffs.join (',', attribute = 'id')}} voir http://jinja.pocoo.org/docs/templates/#join – dmertl

0

Juste un autre hack peut être comme ça.

J'ai un tableau de chaînes dont j'ai besoin de concaténer. J'ai donc ajouté ce tableau dans le dictionnaire, puis l'ai utilisé à l'intérieur pour 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

Si vous ne pouvez pas utiliser juste filtre de jointure, mais besoin d'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 %}