Ich habe einige Variablen in einer jinja2-Vorlage, die Zeichenfolgen sind, die durch ein ';' getrennt sind.
Ich muss diese Zeichenfolgen separat im Code verwenden. dh die Variable ist variable1 = "grün; blau"
{% list1 = {{ variable1 }}.split(';') %}
The grass is {{ list1[0] }} and the boat is {{ list1[1] }}
Ich kann sie vor dem Rendern der Vorlage aufteilen, aber da es manchmal bis zu 10 Zeichenfolgen innerhalb der Zeichenfolge gibt, wird dies chaotisch.
Ich hatte vorher einen JSP, wo ich tat:
<% String[] list1 = val.get("variable1").split(";");%>
The grass is <%= list1[0] %> and the boat is <%= list1[1] %>
BEARBEITEN:
Es funktioniert mit:
{% set list1 = variable1.split(';') %}
The grass is {{ list1[0] }} and the boat is {{ list1[1] }}
Antworten:
Nachdem ich nach 5 Jahren auf meine eigene Frage zurückgekommen war und so viele Leute gesehen hatte, fand ich dies nützlich, ein kleines Update.
Eine String-Variable kann
list
mithilfe der Split-Funktion in a aufgeteilt werden (sie kann ähnliche Werte enthalten,set
ist für die Zuweisung vorgesehen ). Ich habe diese Funktion in der offiziellen Dokumentation nicht gefunden, aber sie funktioniert ähnlich wie normales Python. Die Elemente können über einen Index aufgerufen, in einer Schleife verwendet oder wie von Dave vorgeschlagen, wenn Sie die Werte kennen, Variablen wie ein Tupel festlegen.{% set list1 = variable1.split(';') %} The grass is {{ list1[0] }} and the boat is {{ list1[1] }}
oder
{% set list1 = variable1.split(';') %} {% for item in list1 %} <p>{{ item }}<p/> {% endfor %}
oder
{% set item1, item2 = variable1.split(';') %} The grass is {{ item1 }} and the boat is {{ item2 }}
quelle
{% set list1,list2 = variable1.split(';') %}
.Wenn bis zu 10 Zeichenfolgen vorhanden sind, sollten Sie eine Liste verwenden, um alle Werte zu durchlaufen.
{% set list1 = variable1.split(';') %} {% for list in list1 %} <p>{{ list }}</p> {% endfor %}
quelle
Sie können in jinja keinen beliebigen Python-Code ausführen. In dieser Hinsicht funktioniert es nicht wie JSP (es sieht einfach ähnlich aus). Alle Dinge in Jinja sind benutzerdefinierte Syntax.
Für Ihren Zweck ist es am sinnvollsten, einen benutzerdefinierten Filter zu definieren , damit Sie beispielsweise Folgendes tun können:
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) }}
Die Filterfunktion könnte dann so aussehen:
def splitpart (value, index, char = ','): return value.split(char)[index]
Eine Alternative, die noch sinnvoller sein könnte, wäre, sie im Controller aufzuteilen und die geteilte Liste an die Ansicht zu übergeben.
quelle