Использование loop.counter в шаблоне Python Jinja для цикла
Быстрый ответ
Чтобы показать счётчик в цикле Jinja, используйте loop.index — счёт начнется с 1. Если же счёт должен начинаться с нуля, используйте loop.index0:
{% for item in sequence %}
  {{ loop.index }}: {{ item }}
{% endfor %}
Таким образом, если нужно начать с нуля, loop.index заменяется на loop.index0.

Расширяем возможности циклов Jinja для улучшения шаблонов
Уменьшение кода с loop.revindex
С помощью loop.revindex можно работать с обратным отсчётом. Это аналогично обратному отсчёту времени до момента, который вы ожидаете:
{% for item in sequence %}
  {{ loop.revindex }}: {{ item }} // Как обратный отсчет до посещения стоматолога
{% endfor %}
Отслеживание прогресса цикла: Всегда в курсе
loop.first и loop.last помогают легко определить начало и конец цикла, что упрощает навигацию:
{% for user in users %}
  {% if loop.first %}
    Первый в очереди: {{ user.name }}! // Статус VIP обеспечен
  {% elif loop.last %}
    Последний, но не менее значимый: {{ user.name }}. // Сохраняем лучшее на потом
  {% else %}
    Следующий: {{ user.name }}
  {% endif %}
{% endfor %}
Несложная конкатенация в Jinja Template
С loop.index0 вы можете просто конкатенировать строки и формировать ID элементов без всякой магии:
{% for item in items %}
<div id="item-{{ loop.index0 }}"> Контент </div>
{% endfor %}
Повышаем уровень: Манипулируем переменными внутри циклов
set в Jinja: внедряемся в цикл
set позволяет определить или изменить переменные внутри цикла без лишних усилий:
{% for item in items %}
  {% set new_item = item|upper %}
  {{ loop.index }} – {{ new_item }} // Только ЗАГЛАВНЫЕ БУКВЫ. Мы не кричим, обещаем.
{% endfor %}
Django против Jinja: сравниваем два счётчика
Не следует путать счётчик цикла Django forloop.counter с счётчиками в Jinja. Несмотря на внешнюю схожесть, они выполняют разные функции.
Руководство по использованию: Применение условных операторов в цикле
Условные выражения обогащают циклы Jinja, благодаря чему можно реализовывать сложную логику:
{% for number in numbers %}
  {{ 'Четное' if number % 2 == 0 else 'Нечетное' }} // Анализируем, чётное число или нечётное.
{% endfor %}
Визуализация
Представьте себя участником гонки (🏎️), где каждый круг имеет свой номер. loop.counter пригодится, чтобы отслеживать каждый пройденный круг:
{% for car in race_cars %}
   Круг {{ loop.counter }}: 🏎️💨 (машина №{{ loop.counter }} мчится мимо) // Здесь нет ограничений на скорость!
{% endfor %}
Таким образом, вместе с loop.counter с каждым кругом увеличивается и счётчик.
Изучаем управляющие инструкции Jinja
Jinja предоставляет множество инструментов, выходящих за рамки обычных циклов. Изучим некоторые из них и опробуем их в действии:
{% for user in users %}
  {{ user.name }}
  {% if user.has_error %}
    {{ user.error_message }} // Ой, есть ошибка...
    {% break %} // Пора прервать цикл!
  {% endif %}
{% endfor %}
Вложенные циклы: Осваем Loop-ception
Вложенные циклы могут усложнить понимание кода, но loop.parentloop в Jinja помогает разобраться в ситуации:
{% for category in categories %}
  {{ category.name }}:
  {% for product in category.products %}
    – {{ loop.parentloop.index }}.{{ loop.index }} {{ product.name }} // Уровень Loop-ception: Профессионал
  {% endfor %}
{% endfor %}
Полезные материалы
- Документация для дизайнера шаблонов — Jinja Documentation (3.0.x) — Исследуйте возможности переменных цикла for и общее использование Jinja.
 - Документация для дизайнера шаблонов — Jinja Documentation (3.0.x) — Ознакомьтесь с функциями, позволяющими расширить управление циклами и использование шаблонов Jinja в целом.
 - Шаблоны — Документация Flask (2.0.x) — Изучите шаблонизацию с Jinja пошагово.
 - Основы шаблонизации в Jinja – Real Python — Универсальное руководство по Jinja и Flask.
 - GitHub – pallets/jinja: Очень быстрый и выразительный движок шаблонов. — Погрузитесь в исходный код и возможности вклада в развитие движка шаблонов Jinja.
 - Документация для дизайнера шаблонов — Jinja Documentation (3.0.x) — Откройте мир встроенных фильтров и тестов, которые помогут сделать ваши шаблоны ещё лучше.
 


