Как увеличить переменную в цикле for в шаблоне jinja? - программирование
Подтвердить что ты не робот

Как увеличить переменную в цикле for в шаблоне jinja?

Я хотел бы сделать что-то вроде:

переменная p находится из test.py, которая представляет собой список ['a', 'b', 'c', 'd']

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

вывод результата: 1 2 3 4

4b9b3361

Ответ 1

Вы можете использовать set для увеличения счетчика:

{% set count = 1 %}
{% for i in p %}
  {{ count }}
  {% set count = count + 1 %}
{% endfor %}

Или вы можете использовать loop.index:

{% for i in p %}
  {{ loop.index }}
{% endfor %}

Проверьте конструктор шаблонов.

Ответ 2

Как говорит Jeroen, есть проблемы с определением области охвата: если вы установите "count" вне цикла, вы не сможете изменить его внутри цикла.

Вы можете победить это поведение, используя объект, а не скаляр для "count":

{% set count = [1] %}

Теперь вы можете манипулировать счетом внутри forloop или даже% include%. Вот как я увеличиваю счет (да, это kludgy, но хорошо):

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

Ответ 3

Здесь мое решение:

Поместите все счетчики в словарь:

{% set counter = {
    'something1': 0,
    'something2': 0,
    'etc': 0,
    } %}

Определите макрос, чтобы легко их увеличить:

{% macro increment(dct, key, inc=1)%}
    {% if dct.update({key: dct[key] + inc}) %} {% endif %}
{% endmacro %}

Теперь, когда вы хотите увеличить счетчик "something1", просто выполните:

{{ increment(counter, 'something1') }}

Ответ 4

Пришел поиск метода 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/