100 votes

Concaténation de chaînes de caractères dans Jinja

Je souhaite simplement parcourir en boucle une liste existante et en faire une chaîne de caractères délimitée par des virgules.
Voici ce qu'il en est : my_string = 'stuff, stuff, stuff, stuff'

Je connais déjà loop.last J'ai 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%}

0 votes

OK, le code original que j'ai posté fonctionne, je l'avais mis dans {{}} dans mon code actuel au lieu de {%%} J'ai cherché et cherché la meilleure façon de l'aborder et les choses disponibles pour le faire, et c'était à la fin de la journée jusqu'à la nuit, donc {{}} s'est glissé dans ma frustration. Je vous remercie toutefois pour votre réponse

164voto

bernie Points 44206

Si stuffs est une liste de chaînes de caractères, voici ce qui fonctionnerait :

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

Véase join filtre la documentation, ainsi que les filtres en général la documentation.

p.s.

Une façon plus conviviale de lire

{{ my ~ ', ' ~ string }}

30 votes

N'oubliez pas d'utiliser ~ au lieu de + comme dit ici

83voto

Dag Wieers Points 1

Vous pouvez utiliser + si vous savez que toutes les valeurs sont des chaînes. Jinja fournit également la fonction ~ qui garantit que toutes les valeurs sont d'abord converties en chaînes de caractères.

{% set my_string = my_string ~ stuff ~ ', '%}

1 votes

Thx. C'est aussi dans la documentation jinja.palletsprojects.com/fr/2.10.x/templates/#math

11voto

KacieHouser Points 405

Ma faute, 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 qu'il contient.

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

Je veux my_sting être

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 bien, stuffs est probablement un dictionnaire, mais vous avez compris l'essentiel.

Oui, j'ai trouvé le join et j'avais l'intention de l'aborder de la manière suivante :

 {% 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 nécessaires, et la lecture de cette documentation m'a donné mal à la tête. Elle ne dit pas explicitement d'où l'importer, ni même où placer la déclaration d'importation, alors je me suis dit que trouver un moyen de concaténer serait le moindre des deux maux.

8voto

Kuba Points 322

Si vous ne pouvez pas vous contenter d'utiliser la jointure par filtrage et que vous devez effectuer certaines opérations sur les entrées du tableau :

{% for entry in array %}
User {{ entry.attribute1 }} has id {{ entry.attribute2 }}
{% if not loop.last %}, {% endif %}
{% endfor %}

1 votes

{% if not loop.last %}, {% endif %} -> parfait !

2voto

Kapil Points 68

Un autre piratage peut être comme ça.

J'ai un tableau de chaînes de caractères que je dois concaténer. J'ai donc ajouté ce tableau dans un dictionnaire et je l'ai utilisé dans une boucle for, ce 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 votes

C'est génial et ça évite les suppléments None lorsque le code fait partie du modèle de l'application Flask.

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