Оператор if/elif/else
в шаблонах Jinja2 сравним с оператором if/else
в Python. В простейшей форме, можно использовать его, чтобы проверить, определена ли переменная, не пуста ли она или не ложна:
{% if users %} <ul> {% for user in users %} <li>{{ user.username|e }}</li> {% endfor %} </ul> {% endif %}
Для нескольких веток можно использовать {% elif ... %}
и {% else %}
, как в Python. Также можно использовать более сложные выражения:
{% if kenny.sick %} Kenny is sick. {% elif kenny.dead %} You killed Kenny! You bastard!!! {% else %} Kenny looks okay --- so far {% endif %}
В шаблонах Jinja2 доступно встроенные выражения {% ... if ... else ... %}
, что полезно в некоторых ситуациях. Например, выражения if/else
можно использовать для расширения шаблона из другого шаблона, если переменная определена, в противном случае из шаблона макета по умолчанию:
{% extends layout_template if layout_template is defined else 'master.html' %}
Общий синтаксис: <сделать что-то>, if <что-то истинно>, else <сделать что-то еще>.
Часть выражения else
в шаблоне необязательна. Если не предусмотрено другое поведение, то по умолчанию блок else
неявно вычисляется в неопределенный объект Undefined
:
{{ "[{}]".format(page.title) if page.title }}
Так же оператор шаблона if
можно использовать в циклах шаблонов, для фильтрации последовательности в момент итерации, что позволяет пропускать ненужные элементы. В следующем примере пропускаются все скрытые пользователи:
{% for user in users if not user.hidden %} <li>{{ user.username|e }}</li> {% endfor %}