Несмотря на то, что Jinja не является языком программирования, у него есть свои ключевые слова и правила, которые вместе образуют синтаксис. Этот синтаксис позволяет писать «код» и объяснять компьютеру, что нужно сделать, на понятном ему языке HTML. Jinja называют языком шаблонизации, потому что он используется для создания шаблонов, которые могут быть заполнены динамическими данными.
В основном вы будете создавать шаблоны Jinja прямо в панели администратора Carrot quest. Однако вы также можете записывать их в обычные текстовые файлы. Jinja не требует определенного расширения файла и может генерировать любой текстовый формат, например HTML, XML, CSV, LaTeX и т.д.
Код Jinja часто вставляется в текст или в другие типы кода, например, в HTML для Email. Для этого используют специальные символы, которые помогают отличать код Jinja от обычного текста в шаблоне или другого кода. Они показывают, где начинается и заканчивается код Jinja.
В таблице ниже указаны необходимые разделители:
Разделитель | Пример | Для чего используется |
{{..}} | {{ name }} <!-- Выведет значение переменной name -- > | Используется для вывода значений переменных или результатов выражений |
{%..%} | {% set name = "Alice" %} | Используется для управляющих структур и логических операций. Например, команды, циклы, условия, создание переменных и вызов функций. |
{#..#} | {# Это комментарий, который не будет виден в итоговом HTML #} | Комментарии внутри кода. Делают ваш Jinja-код более понятным для других людей. |
Одна из основных функций Jinja — это переменные. Они позволяют сохранять значения во время рендеринга шаблона. Рендеринг шаблона — это процесс преобразования шаблона с динамическими данными в окончательный HTML или другой текстовый формат, который будет отображаться конечному пользователю. Проще говоря, это когда шаблон с переменными и логикой превращается в готовую веб-страницу или документ.
У переменной всегда есть имя, по которому к ней можно обратиться, а также тип. Тип определяет какие значения может хранить переменная и какие операции (выражения) с ними можно выполнять. Jinja автоматически определяет тип переменной при её создании на основе присвоенного значения, поэтому не стоит об этом беспокоиться.
Основные типы переменных в Jinja:
Создание переменных
Чтобы использовать переменную, её сначала нужно создать и задать ей значение. Это делается с помощью команды set
. Например, команда {% set favorite-color = "красный" %}
создаст переменную favorite-color
и сохранит в ней слово "красный". После этого вы сможете использовать эту переменную в любом месте кода, просто указав её имя.
{% set favourite-color = "красный" %} {{ favourite-color }} Output: красный
Создание с условиями
При создании переменной можно использовать условные операторы if
, else
и elif
. Пример использования if/else
при создании переменной:
{% set name = user.name | title if user.name else "Дорогой клиент"
Пример без использования if/else
при создании переменной:
{% set name = "Дорогой клиент" %} {% if user.name %} {% set name = user.name | title %} {% endif %} {{ name }}
💡 Обязательно задавайте значение переменных перед их использованием, иначе парсер не сможет понять, что вы имеете в виду под именем переменной.
Иногда вам нужно узнать значения определенных свойств (переменных) у объекта. Например, какое значение хранится в свойстве «name» у объекта «user».
Есть два способа получить свойства переменной:
variable['property']
, чтобы получить значение свойства. Это наиболее предпочтительный способ.{{ user["name"] }} <!-- Выведет значение свойства "name" у объекта user -→
variable.property
для доступа к значениям свойств. Обратите внимание: Чтобы избежать ошибок, следует придерживаться обозначения variable['property']
в квадратных скобках. Хотя в целом эти два обозначения должны быть эквивалентны, известны случаи, когда использование variable.property
приводит к критическим проблемам в нашем сервисе.
Например:
{% set user = {'name': 'Alice', 'age': 30} %} {{ user['name'] }} <!-- Выведет Alice --> {{ user['age'] }} <!-- Выведет 30 -->
Значение None
Когда Jinja получает значение None
, оно преобразует его в строку "None"
. Это значит, что если вы используете значение из функции или переменной, которая возвращает None
, то в шаблоне вы увидите строку "None"
.
Пример:
{% set result = None %} Значение: {{ result }} <!-- Выведет "None" -->
Jinja поддерживает простые выражения, похожие на те, что используются в Python. Даже если вы не знакомы с Python, они легки в использовании. Подробнее прочитать про выражения вы можете в официальной документации Jinja, здесь мы рассмотрим основные выражения:
Математические выражения
В Jinja можно использовать арифметические операции над числами прямо в шаблоне. Это полезно для вычисления значений на основе данных. Выполняются они с помощью операторов:
+
— сложение;-
— вычитание;*
— умножение;/
— деление;//
— выполняет целочисленное деление с округлением вниз. Например, 20 // 7 возвращает результат 2 (20 делится на 7 два раза с остатком);%
— вычисляет остаток от деления. Например, 20 % 7 вернёт 6 (при делении 20 на 7 остаток равен 6).
Пример:
{% set a = 10 %} {% set b = 3 %} Сложение: {{ a + b }} <!-- Выведет 13 --> Вычитание: {{ a - b }} <!-- Выведет 7 --> Умножение: {{ a * b }} <!-- Выведет 30 --> Деление: {{ a / b }} <!-- Выведет 3.3333... --> Целочисленное деление: {{ a // b }} <!-- Выведет 3 --> Остаток от деления: {{ a % b }} <!-- Выведет 1 -->
Сравнительные выражения
Используются для сравнения значений и принятия решений на основе этих сравнений. Они позволяют выполнять разные действия в зависимости от того, как значения соотносятся друг с другом.
==
— cравнивает два объекта на предмет равенства;!=
— cравнивает два объекта на предмет неравенства;>
— возвращает true, если левая часть больше правой;>=
— возвращает true, если левая часть больше или равна правой части;<
— возвращает true, если левая часть меньше правой;<=
— возвращает true, если левая часть меньше или равна правой части.
Пример:
{% set age = 20 %} {% if age == 18 %} Вам 18 лет. {% elif age > 18 %} Вы старше 18 лет. {% else %} Вы моложе 18 лет. {% endif %}
Логические выражения
Используются для принятия решений в шаблонах. Они позволяют выполнять разные действия в зависимости от условий выражения с помощью логических операторов:
and
— возвращает true, если оба условия истинны;or
— возвращает true, если хотя бы одно из условий истинно;not
— возвращает true, если условие ложно.
Пример:
{% set age = 20 %} {% set country = "Russia" %} {% set has_permission = False %} {% set is_member = True %} {% if age > 18 and country == "Russia" %} Вы совершеннолетний в России. {% endif %} {% if age > 18 or has_permission %} Вы можете войти. {% endif %} {% if not is_member %} Пожалуйста, зарегистрируйтесь. {% else %} Добро пожаловать, член клуба! {% endif %}
Другие статьи про Jinja:
Структура данных в Jinja
Фильтры в Jinja
Персонализация с помощью Jinja
Полезные заготовки Jinja-кода