私は次のようなことをしたいです:
変数pはtest.pyからのもので、これはリスト['a'、 'b'、 'c'、 'd']です
{% for i in p %}
{{variable++}}
{{variable}}
結果出力:1 2 3 4
loop.index
を使用できます:
{% for i in p %}
{{ loop.index }}
{% endfor %}
テンプレートデザイナーのドキュメント を確認してください。
より新しいバージョンでは、スコーピングルールにより、次のように動作しますnot:
{% set count = 1 %}
{% for i in p %}
{{ count }}
{% set count = count + 1 %}
{% endfor %}
Jeroenがスコープの問題があると言っているように:ループの外側で 'count'を設定すると、ループの内側でそれを変更することはできません。
'count'にスカラーではなくオブジェクトを使用すると、この動作を無効にできます。
{% set count = [1] %}
Forloopまたは%include%内でカウントを操作できるようになりました。カウントをインクリメントする方法は次のとおりです(はい、それは気味悪いですが、まあ)
{% if count.append(count.pop() + 1) %}{% endif %} {# increment count by 1 #}
2.10以降、スコープの問題を解決するには、次のようなことができます。
{% set count = namespace(a=0) %}
{% for i in p %}
{{ count.a }}
{% set count.a = count.a + 1 %}
{% endfor %}
ここに私の解決策があります:
辞書にすべてのカウンターを入れてください:
{% set counter = {
'counter1': 0,
'counter2': 0,
'etc': 0,
} %}
簡単にインクリメントするマクロを定義します:
{% macro increment(dct, key, inc=1)%}
{% if dct.update({key: dct[key] + inc}) %} {% endif %}
{% endmacro %}
今、 'counter1'カウンターをインクリメントしたいときはいつでも:
{{ increment(counter, 'counter1') }}
これを行うDjangoの方法を探しに来て、この投稿を見つけました。たぶん他の誰かがここに来るDjangoソリューションを必要としています。
{% for item in item_list %}
{{ forloop.counter }} {# starting index 1 #}
{{ forloop.counter0 }} {# starting index 0 #}
{# do your stuff #}
{% endfor %}
詳細はこちら: https://docs.djangoproject.com/en/1.11/ref/templates/builtins/
私もこの行動に苦労しました。カウンターに基づいて神社のdivクラスを変更したかった。 Pythonicの方法が機能しなかったことに驚いた。次のコードは、各反復でカウンターをリセットするため、赤いクラスのみがありました。
{% 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 %}
私はこのようにloop.indexを使用しましたが、動作します:
{% 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 %}