Несмотря на то, что 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-кода