Split chaîne en liste dans Jinja?

J’ai un certain nombre de variables dans un template jinja2 qui sont des chaînes séparées par un ‘;’.

Je dois utiliser ces chaînes séparément dans le code. c’est-à-dire que la variable est variable1 = “vert; bleu”

{% list1 = {{ variable1 }}.split(';') %} The grass is {{ list1[0] }} and the boat is {{ list1[1] }} 

Je peux les séparer avant de rendre le modèle, mais comme il y a parfois jusqu’à 10 chaînes à l’intérieur de la chaîne, cela devient désordonné.

J’avais un jsp avant où j’ai fait:

  The grass is  and the boat is  

MODIFIER:

Cela fonctionne avec:

 {% set list1 = variable1.split(';') %} The grass is {{ list1[0] }} and the boat is {{ list1[1] }} 

Cela fonctionne avec:

 {% set list1 = variable1.split(';') %} The grass is {{ list1[0] }} and the boat is {{ list1[1] }} 

S’il y a jusqu’à 10 chaînes, vous devez utiliser une liste pour parcourir toutes les valeurs.

 {% set list1 = variable1.split(';') %} {% for list in list1 %} 

{{ list }}

{% endfor %}

Vous ne pouvez pas exécuter du code Python arbitraire dans jinja; cela ne fonctionne pas comme JSP à cet égard (cela semble juste similaire). Toutes les choses dans jinja sont une syntaxe personnalisée.

Pour vous, il serait plus judicieux de définir un filtre personnalisé , de manière à pouvoir par exemple:

 The grass is {{ variable1 | splitpart(0, ',') }} and the boat is {{ splitpart(1, ',') }} Or just: The grass is {{ variable1 | splitpart(0) }} and the boat is {{ splitpart(1) }} 

La fonction de filtrage pourrait alors ressembler à ceci:

 def splitpart (value, index, char = ','): return value.split(char)[index] 

Une alternative, qui pourrait être encore plus sensée, serait de la diviser dans le contrôleur et de transmettre la liste divisée à la vue.