У меня проблема с loop.index
в for
цикл для сложной сетки (размечен как простой одноуровневый список HTML). у меня есть loop_index
переменная в частичке ветки для «ячейки» сетки ( <li>
) который равен loop.index
,
Первоначально у меня была эта простая проверка на основе конкретных чисел для первых элементов в цикле.
{% set class = 'green' %}
{% if (loop_index > 1 and loop_index < 5) or (loop_index > 7 and loop_index < 12) %}
{% set class = 'orange' %}
{% endif %}
Но теперь его следует расширить, чтобы включить в цикл, возможно, неограниченное количество элементов. Поэтому не только пункты 2-4 и 8-11 станут orange
но также 15-18 и т. д.
По сути, мне нужно перебрать 2 класса (оранжевый, зеленый) следующим образом:
Я пытался нанять batch
а также cycle
для этого, но они кажутся неподходящими для этого. batch
похоже, не работает с «неограниченными» циклами и cycle
кажется, не подходит для повторяющегося шаблона с партиями одинаковых предметов (в отличие от циклического перебора несгруппированных одиночных предметов). divisible by
также не работал для меня, как нужно в этом случае.
Как я могу изменить классы в зависимости от значения loop.index
? Я не могу работать с for
цикл или за его пределами здесь — вся работа должна быть выполнена внутри частичной «ячейки» сетки.
Вы можете проверить остальная часть подразделения. Вот рабочие решения:
{% for i in 1..30 %}
{% set class = 'green' %}
{% set loop_index = loop.index %}
{% if (loop_index %7 >= 1 and loop_index %7 < 5) %}
{% set class = 'orange' %}
{% endif %}
* {{ i }} {{class}}
{% endfor %}
Это будет выводить как:
* 5 green
* 6 green
* 7 green
* 8 orange
* 9 orange
* 10 orange
* 11 orange
* 12 green
* 13 green
* 14 green
* 15 orange
* 16 orange
* 17 orange
* 18 orange
* 19 green
* 20 green
* 21 green
* 22 orange
* 23 orange
* 24 orange
* 25 orange
* 26 green
* 27 green
Вы можете проверить вывод в этом рабочем пруте
Других решений пока нет …