Советы и хитрости
Эта часть документации демонстрирует некоторые советы и хитрости для шаблонов Jinja.
Обработка пустых значений по умолчанию
Jinja поддерживает динамическое наследование и не различает родительский и дочерний шаблоны, пока не встретится тег extends. Хотя это приводит к неожиданному поведению, когда всё до первого тега extends, включая пробелы, выводится вместо игнорирования, это может использоваться для интересной уловки.
Обычно дочерние шаблоны наследуют от одного шаблона, который добавляет базовый HTML-скелет. Однако можно поместить тег extends в тег if, чтобы наследовать только от макета, если переменная standalone имеет значение false, что выполняется по умолчанию, если она не определена. Кроме того, в файл добавляется очень базовый скелет, так что если он действительно отрисовывается с standalone установленным в True, добавляется очень базовый HTML-скелет:
{% if not standalone %}{% extends 'default.html' %}{% endif -%}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<title>{% block title %}The Page Title{% endblock %}</title>
<link rel="stylesheet" href="style.css" type="text/css">
{% block body %}
<p>This is the page body.</p>
{% endblock %}
Переключение строк
Если вы хотите иметь различные стили для каждой строки таблицы или списка, вы можете использовать метод cycle на объекте loop.
<ul>
{% for row in rows %}
<li class="{{ loop.cycle('odd', 'even') }}">{{ row }}</li>
{% endfor %}
</ul>
cycle может принимать неограниченное количество строк. Каждый раз, когда этот тег встречается, следующая строка из списка отображается.
Доступ к родительскому циклу
Специальная переменная loop всегда указывает на внутренний цикл. Если необходимо получить доступ к внешнему циклу, можно использовать псевдоним:
<table>
{% for row in table %}
<tr>
{% set rowloop = loop %}
{% for cell in row %}
<td id="cell-{{ rowloop.index }}-{{ loop.index }}">{{ cell }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
© 2007–2021 Pallets
Licensed under the BSD 3-clause License.
https://jinja.palletsprojects.com/en/3.0.x/tricks/