Теги итераций

for

Неоднократно выполняет блок кода. Полный список атрибутов, доступных в forцикле, см. в разделе forloop.

Тег итерации for можно использовать для перебора многомерных массивов.

Пример

{% for demand in demands %}
  Отгрузка номер {{ demand.name }} 
{% endfor %}

Вывод

Отгрузка номер 0001
Отгрузка номер 0002

В примере выше, мы перебираем все отгрузки demand в массиве demands и выводим их названия c помощью массива {{ demand.name }}

Пример

{% for demand in demands %}
  {% for attribute in demand.attributes %}
    Отгрузка номер {{ demand.name }} - Доп. поле {{ attribute.name }} 
  {% endfor %}
{% endfor %}

Вывод

Отгрузка номер 0001 - Доп. поле 1
Отгрузка номер 0001 - Доп. поле 2
Отгрузка номер 0002 - Доп. поле 1
Отгрузка номер 0002 - Доп. поле 2

Теги итератора могут быть вложенными. Например, выше мы перебираем все отгрузки demand в массиве demands, а для каждой отгрузки demand перебираем массив названий доп. полей {{ attributes }}

Пример

{% for demand in demands %}
  {% for invoiceOut in demand.invoicesOut %}
    {% for attribute in invoiceOut.attributes %}
      
      {% if attribute.name == "Нужное доп. поле" %}
        {{ attribute.value }}
      {% endif %} 
      
    {% endfor %}
  {% endfor %}
{% endfor %}

Вложенность тегов итерации for .неограничyна. Внутри тега фор можно использовать теги проверки условия if

break

Заставляет цикл прекращать итерации, когда встречает breakтег.

Пример:

{% for i in (1..5) %}
  {% if i == 4 %}
    {% break %}
  {% else %}
    {{ i }}
  {% endif %}
{% endfor %}

Вывод

1 2 3

continue

Заставляет цикл пропустить текущую итерацию при обнаружении continueтега.

Пример:

{% for i in (1..5) %}
  {% if i == 4 %}
    {% continue %}
  {% else %}
    {{ i }}
  {% endif %}
{% endfor %}

Вывод

1 2 3   5

Параметры тега for

limit

Ограничивает выход из цикла for до определенного индекса.

Пример:

  Стоимость первых трех позиций заказа:

  {% for position in positions limit:4 %}
    {{ position.price }} руб.
  {% endfor %}

Вывод

Стоимость первых двух позиций заказа:

100 руб.
200 руб.
300 руб.

offset

Запускает цикл for с определенного индекса.

Пример:

Стоимость позиций заказа, кроме первых двух: 
 
 {% for position in positions limit:2 %}
    {{ position.price }} руб.
 {% endfor %}

Вывод

Стоимость позиций заказа, кроме первых двух:

300 руб.
400 руб.
500 руб.

range

Определяет диапазон чисел для цикла. Вы можете определить диапазон, используя как буквальные, так и переменные значения.

Пример:

{% for i in (3..5) %}
  {{ i }}
{% endfor %}

{% assign my_limit = 4 %}
{% for i in (1..my_limit) %}
{{ i }}
{% endfor %}

Вывод

3 4 5

1 2 3 4

forloop

forloop - объект, который содержит атрибуты своего цикла for

forloop может быть использован только в пределах тегов for

forloop.first

Возвращает, trueесли это первая итерация цикла for. Возвращает, falseесли это не первая итерация.

Пример:

{% for contactperson in agent.contactpersons %}
    {% if forloop.first == true %}
    Первое контактное лицо компании - {{ contactperson.phone }} 
    {% else %}
    Остальные контактные лица компании - {{ contactperson.phone }} 
    {% endif %}
{% endfor %}

Вывод

Первое контактное лицо компании - Иванов Иван!
Остальные контактные лица компании - Петров Петр.
Остальные контактные лица компании - Семенов Семен.

forloop.index

Возвращает текущий индекс цикла for, начиная с 1.

Пример:

{% for account in organization.accounts %}
    {{ forloop.index }}-й счет компании: {{ account.accountNumber }} 
{% endfor %}

Вывод

1-й счет компании: 1234567890
2-й счет компании: 0987654321
3-й счет компании: 1231231231

forloop.index0

Возвращает текущий индекс цикла for, начиная с 0.

Пример:

{% for account in organization.accounts %}
    {{ forloop.index }}-й счет компании: {{ account.accountNumber }} 
{% endfor %}

Вывод

0-й счет компании: 1234567890
1-й счет компании: 0987654321
2-й счет компании: 1231231231

forloop.last

Возвращает, trueесли это последняя итерация цикла for. Возвращает, falseесли это не последняя итерация.

Пример:

Телефоны менеджеров контрагента: 

{% for contactperson in agent.contactpersons %}
    
    {{contactperson.name }} - {{contactperson.phone }} 
    {% if forloop.last != true %}
        , 
    {% endif %}
    
{% endfor %}

Вывод

Телефоны менеджеров контрагента:

Иванов Иван - 89991112233, Петров Петр - 89000000000,
Семенов Семен - 81112223344

forloop.length

Возвращает количество итераций цикла.

Пример:

{% for payment in payments %}
  {% if forloop.first %}
    По заказу {{ forloop.length }} платежа на сумму:
  {% endif %}
  {{ payment.sum }} {{rate.name}} 
{% endfor %}

Вывод

По заказу 2 платежа на сумму:
1000 руб
2000 руб
3000 руб

forloop.rindex

Возвращает forloop.index в обратном порядке.

Пример:

{% for invoiceOut in invoicesOut %}
    {{ forloop.rindex }}-й счет - номер {{ invoiceOut.name }}
{% endfor %}

Вывод

3-й счет - номер 3
2-й счет - номер 2
1-й счет - номер 1

forloop.rindex0

Возвращает forloop.index0 в обратном порядке.

Пример

{% for invoiceOut in invoicesOut %}
    {{ forloop.rindex0 }}-й счет - номер {{ invoiceOut.name }}
{% endfor %}

Вывод

3-й счет - номер 3
2-й счет - номер 2
1-й счет - номер 1
0-й счет - номер 0

cycle

Перебирает группу строк и выводит их в том порядке, в котором они были переданы в качестве параметров. При каждом вызове cycleвыводится следующая строка, переданная в качестве параметра.

cycleдолжен использоваться внутри блока for

Пример

{% cycle 'one', 'two', 'three' %}
{% cycle 'one', 'two', 'three' %}
{% cycle 'one', 'two', 'three' %}
{% cycle 'one', 'two', 'three' %}

Вывод

one
two
three
one

Last updated