jinja2 rekursive Schleife vs Wörterbuch
Habe ich Folgendes Wörterbuch:
{'a': {'b': {'c': {}}}}
Und die folgenden Jinja2 template:
{% for key in dictionary recursive %}
<li>{{ key }}
{% if dictionary[key] %}
<ul>{{ loop(dictionary[key]) }}</ul>
{% endif %}
</li>
{% endfor %}
Aber Jinja2 immer Ausgabe:
<ul>
<li>a</li>
<ul>
<li>b</li>
</ul>
</ul>
Mein verstehen ist, dass die Verwendung rekursiver, wäre es für mich das "c" - element zu, aber es funktioniert nur für eine Tiefe von 2. Warum ist dictionary
nicht ändern, um die dictionary[key]
bei jeder loop-iteration ? Die dictionary
ist immer das original dictionary
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du hast Recht,
dictionary
wird nicht aktualisiert in der Rekursion ruft, und die Schleife wird nicht fortgesetzt werden, da der Schlüssel nicht gefunden.Einen workaround zu diesem problem ist nur mit den zugeordneten Variablen in der for-Schleife. Im Wörterbuch Beispiel bedeutet dies, dass die Iteration durch die Elemente des dictionary, anstatt einfach die Tasten:
Die Ausgabe dieses Skripts ist:
wo man sehen kann, dass die Rekursion auf die
b
Schlüssel funktioniert, weil beidekey
undvalue
aktualisiert werden bei jeder iteration der Schleife (ich fügte hinzu, die "Rekursive Schlüssel, Wert" - Nachricht zu der Vorlage deutlich zu machen).probieren Sie etwas wie dieses:
Ich glaube, Sie brauchen, um eine iterierbar in die
loop()
konstruieren.