私は次のようなことをしたいと思います:
変数pは、リスト['a'、 'b'、 'c'、 'd']であるtest.pyからのものです。
{% for i in p %}
{{variable++}}
{{variable}}
結果の出力は次のとおりです
。1234
私は次のようなことをしたいと思います:
変数pは、リスト['a'、 'b'、 'c'、 'd']であるtest.pyからのものです。
{% for i in p %}
{{variable++}}
{{variable}}
結果の出力は次のとおりです
。1234
回答:
あなたが使用することができますloop.index
:
{% for i in p %}
{{ loop.index }}
{% endfor %}
テンプレートデザイナのドキュメントを確認してください。
最近のバージョンでは、スコープ規則により、以下は機能しませんでした。
{% set count = 1 %}
{% for i in p %}
{{ count }}
{% set count = count + 1 %}
{% endfor %}
2.10以降、スコープの問題を解決するには、次のようにします。
{% set count = namespace(value=0) %}
{% for i in p %}
{{ count.value }}
{% set count.value = count.value + 1 %}
{% endfor %}
Jeroenが言うように、スコープの問題があります。ループの外側で「count」を設定すると、ループの内側で変更することはできません。
'count'にスカラーではなくオブジェクトを使用することで、この動作を無効にすることができます。
{% set count = [1] %}
forloopまたは%include%内でカウントを操作できるようになりました。これが私がカウントをインクリメントする方法です(はい、それは厄介ですがまあまあです):
{% if count.append(count.pop() + 1) %}{% endif %} {# increment count by 1 #}
{% set count = [] %}
すべてのループでリストに項目を追加し、{% set __ = index.append(1) %}
その長さを使用してインデックスを表示することindex|length
です。
{% set count = [ ] %}
、すべてのループ内のリストに項目を追加{% set __ = count.append(1) %}
し、カウントを表示するために長さを使用するcount|length
これが私の解決策です:
すべてのカウンターを辞書に入れます。
{% 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') }}
私もこの行動に苦労しました。カウンターに基づいてジンジャの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 %}
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/