Использование loop.counter в шаблоне Python Jinja для цикла

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы показать счётчик в цикле Jinja, используйте loop.index — счёт начнется с 1. Если же счёт должен начинаться с нуля, используйте loop.index0:

jinja
Скопировать код
{% for item in sequence %}
  {{ loop.index }}: {{ item }}
{% endfor %}

Таким образом, если нужно начать с нуля, loop.index заменяется на loop.index0.

Кинга Идем в IT: пошаговый план для смены профессии

Расширяем возможности циклов Jinja для улучшения шаблонов

Уменьшение кода с loop.revindex

С помощью loop.revindex можно работать с обратным отсчётом. Это аналогично обратному отсчёту времени до момента, который вы ожидаете:

jinja
Скопировать код
{% for item in sequence %}
  {{ loop.revindex }}: {{ item }} // Как обратный отсчет до посещения стоматолога
{% endfor %}

Отслеживание прогресса цикла: Всегда в курсе

loop.first и loop.last помогают легко определить начало и конец цикла, что упрощает навигацию:

jinja
Скопировать код
{% 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 элементов без всякой магии:

jinja
Скопировать код
{% for item in items %}
<div id="item-{{ loop.index0 }}"> Контент </div>
{% endfor %}

Повышаем уровень: Манипулируем переменными внутри циклов

set в Jinja: внедряемся в цикл

set позволяет определить или изменить переменные внутри цикла без лишних усилий:

jinja
Скопировать код
{% for item in items %}
  {% set new_item = item|upper %}
  {{ loop.index }} – {{ new_item }} // Только ЗАГЛАВНЫЕ БУКВЫ. Мы не кричим, обещаем.
{% endfor %}

Django против Jinja: сравниваем два счётчика

Не следует путать счётчик цикла Django forloop.counter с счётчиками в Jinja. Несмотря на внешнюю схожесть, они выполняют разные функции.

Руководство по использованию: Применение условных операторов в цикле

Условные выражения обогащают циклы Jinja, благодаря чему можно реализовывать сложную логику:

jinja
Скопировать код
{% for number in numbers %}
  {{ 'Четное' if number % 2 == 0 else 'Нечетное' }} // Анализируем, чётное число или нечётное.
{% endfor %}

Визуализация

Представьте себя участником гонки (🏎️), где каждый круг имеет свой номер. loop.counter пригодится, чтобы отслеживать каждый пройденный круг:

jinja
Скопировать код
{% for car in race_cars %}
   Круг {{ loop.counter }}: 🏎️💨 (машина №{{ loop.counter }} мчится мимо) // Здесь нет ограничений на скорость!
{% endfor %}

Таким образом, вместе с loop.counter с каждым кругом увеличивается и счётчик.

Изучаем управляющие инструкции Jinja

Jinja предоставляет множество инструментов, выходящих за рамки обычных циклов. Изучим некоторые из них и опробуем их в действии:

jinja
Скопировать код
{% for user in users %}
  {{ user.name }}
  {% if user.has_error %}
    {{ user.error_message }} // Ой, есть ошибка...
    {% break %} // Пора прервать цикл!
  {% endif %}
{% endfor %}

Вложенные циклы: Осваем Loop-ception

Вложенные циклы могут усложнить понимание кода, но loop.parentloop в Jinja помогает разобраться в ситуации:

jinja
Скопировать код
{% for category in categories %}
  {{ category.name }}:
  {% for product in category.products %}
    – {{ loop.parentloop.index }}.{{ loop.index }} {{ product.name }} // Уровень Loop-ception: Профессионал
  {% endfor %}
{% endfor %}

Полезные материалы

  1. Документация для дизайнера шаблонов — Jinja Documentation (3.0.x) — Исследуйте возможности переменных цикла for и общее использование Jinja.
  2. Документация для дизайнера шаблонов — Jinja Documentation (3.0.x) — Ознакомьтесь с функциями, позволяющими расширить управление циклами и использование шаблонов Jinja в целом.
  3. Шаблоны — Документация Flask (2.0.x) — Изучите шаблонизацию с Jinja пошагово.
  4. Основы шаблонизации в Jinja – Real Python — Универсальное руководство по Jinja и Flask.
  5. GitHub – pallets/jinja: Очень быстрый и выразительный движок шаблонов. — Погрузитесь в исходный код и возможности вклада в развитие движка шаблонов Jinja.
  6. Документация для дизайнера шаблонов — Jinja Documentation (3.0.x) — Откройте мир встроенных фильтров и тестов, которые помогут сделать ваши шаблоны ещё лучше.