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.