Функция cycler
Функция cycler применяется внутри Jinja-шаблонов
и создаёт специальный объект-циклер. Первым параметром
передаётся имя переменной, вторым - последовательность
значений. При каждом обращении к атрибуту с этим именем
возвращается следующее значение, а когда значения
заканчиваются, перебор начинается сначала.
Также можно передать несколько пар «имя - последовательность», и функция вернёт объект с несколькими атрибутами, которые перебираются независимо друг от друга.
Синтаксис
{{ cycler(name, seq) }}
{{ cycler(name1, seq1, name2, seq2, ...) }}
Пример
Давайте создадим циклер с именем row и
последовательно выведем его значения:
{% set rows = cycler('row', ['a', 'b', 'c']) %}
<p>{{ rows.row }}</p>
<p>{{ rows.row }}</p>
<p>{{ rows.row }}</p>
<p>{{ rows.row }}</p>
Результат выполнения кода:
<p>a</p>
<p>b</p>
<p>c</p>
<p>a</p>
Пример
Давайте используем циклер для чередования классов строк таблицы:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
items = ['a', 'b', 'c', 'd', 'e']
return render_template('index.html', items=items)
{% set rows = cycler('cls', ['odd', 'even']) %}
<table>
{% for item in items %}
<tr class="{{ rows.cls }}">
<td>{{ item }}</td>
</tr>
{% endfor %}
</table>
Результат выполнения кода:
<table>
<tr class="odd"><td>a</td></tr>
<tr class="even"><td>b</td></tr>
<tr class="odd"><td>c</td></tr>
<tr class="even"><td>d</td></tr>
<tr class="odd"><td>e</td></tr>
</table>
Пример
Давайте создадим циклер сразу с двумя атрибутами
row и col:
{% set c = cycler('row', ['a', 'b'], 'col', [1, 2, 3]) %}
<p>{{ c.row }} - {{ c.col }}</p>
<p>{{ c.row }} - {{ c.col }}</p>
<p>{{ c.row }} - {{ c.col }}</p>
<p>{{ c.row }} - {{ c.col }}</p>
Результат выполнения кода:
<p>a - 1</p>
<p>b - 2</p>
<p>a - 3</p>
<p>b - 1</p>