[python] Jinja 템플릿의 for 루프에서 변수를 증가시키는 방법은 무엇입니까?

다음과 같이하고 싶습니다.

변수 p는 목록 [ ‘a’, ‘b’, ‘c’, ‘d’] 인 test.py에서 가져온 것입니다.

{% for i in p %}
{{variable++}}
{{variable}}

결과 출력 :
1 2 3 4



답변

다음을 사용할 수 있습니다 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 % 내에서 count를 조작 할 수 있습니다. 카운트를 늘리는 방법은 다음과 같습니다 (예, 엉성하지만 오 잘).

{% if count.append(count.pop() + 1) %}{% endif %} {# increment count by 1 #}


답변

내 해결책은 다음과 같습니다.

모든 카운터를 사전에 넣으십시오.

{% 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') }}


답변

저도이 행동으로 고생했습니다. 카운터를 기반으로 jinja에서 div 클래스를 변경하고 싶었습니다. 비단뱀 방식이 작동하지 않는다는 사실에 놀랐습니다. 다음 코드는 각 반복에서 카운터를 재설정했기 때문에 빨간색 클래스 만있었습니다.

{% 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 %}


답변

누군가 루프 내부에 값을 추가하고 싶다면이 작업을 100 % 사용할 수 있습니다.

{% set ftotal= {'total': 0} %}
{%- for pe in payment_entry -%}
    {% if ftotal.update({'total': ftotal.total + 5}) %}{% endif %}
{%- endfor -%}

{{ftotal.total}}

출력 = 5


답변

이 작업을 수행하는 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/에서 확인하세요.