Ich möchte etwas tun wie:
Die Variable p stammt aus test.py und ist eine Liste ['a', 'b', 'c', 'd'].
{% for i in p %}
{{variable++}}
{{variable}}
Ergebnisausgabe ist:
1 2 3 4
Sie könnten verwenden loop.index
:
{% for i in p %}
{{ loop.index }}
{% endfor %}
Überprüfen Sie die Dokumentation des Vorlagendesigners .
In neueren Versionen würde aufgrund von Gültigkeitsregeln Folgendes nicht funktionieren:
{% set count = 1 %}
{% for i in p %}
{{ count }}
{% set count = count + 1 %}
{% endfor %}
Nach 2.10 können Sie Folgendes tun, um das Scope-Problem zu lösen:
{% set count = namespace(value=0) %} {% for i in p %} {{ count.value }} {% set count.value = count.value + 1 %} {% endfor %}
quelle
Wie Jeroen sagt, gibt es Probleme mit dem Umfang: Wenn Sie 'count' außerhalb der Schleife festlegen, können Sie es nicht innerhalb der Schleife ändern.
Sie können dieses Verhalten umgehen, indem Sie ein Objekt anstelle eines Skalars für 'count' verwenden:
{% set count = [1] %}
Sie können jetzt die Anzahl innerhalb eines Forloops oder sogar ein% include% manipulieren. So erhöhe ich die Anzahl (ja, es ist klobig, aber na ja):
{% if count.append(count.pop() + 1) %}{% endif %} {# increment count by 1 #}
quelle
{% set count = [] %}
, der Liste in jeder Schleife ein Element hinzuzufügen{% set __ = index.append(1) %}
und den Index anhand der Länge anzuzeigenindex|length
.{% do index.append(1) %}
Sie müssen jedoch die hier{% set count = [ ] %}
, der Liste in jeder Schleife ein Element hinzuzufügen{% set __ = count.append(1) %}
und die Anzahl zu verwenden, um die Anzahl anzuzeigencount|length
Hier ist meine Lösung:
Fügen Sie alle Zähler in ein Wörterbuch ein:
{% set counter = { 'counter1': 0, 'counter2': 0, 'etc': 0, } %}
Definieren Sie ein Makro, um sie einfach zu erhöhen:
{% macro increment(dct, key, inc=1)%} {% if dct.update({key: dct[key] + inc}) %} {% endif %} {% endmacro %}
Wenn Sie jetzt den Zähler 'counter1' erhöhen möchten, gehen Sie einfach wie folgt vor:
{{ increment(counter, 'counter1') }}
quelle
Ich hatte auch mit diesem Verhalten zu kämpfen. Ich wollte die Div-Klasse in Jinja basierend auf dem Zähler ändern. Ich war überrascht, dass der pythonische Weg nicht funktionierte. Der folgende Code setzte meinen Zähler bei jeder Iteration zurück, sodass ich nur eine rote Klasse hatte.
{% if sloupec3: %} {% set counter = 1 %} {% for row in sloupec3: %} {% if counter == 3 %} {% set counter = 1 %} {% endif %} {% if counter == 1: %} <div class="red"> some red div </div> {% endif %} {% if counter == 2: %} <div class="gray"> some gray div </div> {% endif %} {% set counter = counter + 1 %} {% endfor %} {% endif %}
Ich habe loop.index so verwendet und es funktioniert:
{% if sloupec3: %} {% for row in sloupec3: %} {% if loop.index % 2 == 1: %} <div class="red"> some red div </div> {% endif %} {% if loop.index % 2 == 0: %} <div class="gray"> some gray div </div> {% endif %} {% endfor %} {% endif %}
quelle
Kam auf der Suche nach Djangos Art dies zu tun und fand diesen Beitrag. Vielleicht braucht jemand anderes die Django-Lösung, der hierher kommt.
{% for item in item_list %} {{ forloop.counter }} {# starting index 1 #} {{ forloop.counter0 }} {# starting index 0 #} {# do your stuff #} {% endfor %}
Lesen Sie hier mehr: https://docs.djangoproject.com/de/1.11/ref/templates/builtins/
quelle
Wenn jemand einen Wert innerhalb der Schleife hinzufügen möchte, können Sie diesen zu 100% verwenden
{% set ftotal= {'total': 0} %} {%- for pe in payment_entry -%} {% if ftotal.update({'total': ftotal.total + 5}) %}{% endif %} {%- endfor -%} {{ftotal.total}}
Ausgabe = 5
quelle