Иногда нужно хранить несколько значений одного типа с одинаковым применением. Например, у вас есть множество товаров, которые вы хотите показать клиенту в письме. Создание отдельной переменной для каждого из них было бы слишком трудоемким.
Поэтому в Jinja есть более сложные структуры данных для таких случаев. Эти структуры данных представляют собой набор переменных, хранящихся вместе под одним именем. Они также предоставляют полезные дополнительные функции. В этой статье мы рассмотрим три такие структуры и поможем вам понять ключевые различия между ними.
Самая простая структура данных в Jinja — это список. Список в Jinja гибкий, и вам не нужно заранее знать, сколько элементов в нём будет. Если вам нужно добавить больше элементов, список автоматически расширится.
Более того, вам не нужно беспокоиться о типах данных, которые хранятся в списке. Списки могут содержать любые типы данных, то есть вы можете смешивать разные типы данных в одном списке.
Создание элементов в списке
Чтобы создать список в Jinja, используйте нотацию {% set myList = %} . Для создания списка используйте квадратные скобки. Внутри скобок укажите значения через запятую. Вы также можете создать пустой список, просто оставив скобки пустыми.
Пример создания списка с элементами:
{% set numbersOneToFive = [1, 2, 3, 4, 5] %}Пример создания пустого списка:
{% set emptyList = [] %}Доступ к элементам в списке
Списки в Jinja индексируются, что значит, у каждого элемента есть свой порядковый номер — индекс. Индексы начинаются с 0. Это позволяет легко получить доступ к любому элементу списка.
Для примера создадим следующий список:
{% set myList = ['a', 'b', 'c', 'x', 'k'] %}Используйте квадратные скобки, чтобы получить элемент по его индексу.
{{ myList[0] }} — вернет 'a'.{{ myList[4] }} — вернет 'k'.Важно помнить, что индексы начинаются с 0, а не с 1. Например, myList[1] вернет второй элемент, а не первый.
Добавление и удаление элементов в списке
Так как списки — это динамические структуры данных, то вы можете добавлять и удалять элементы в шаблонах Jinja.
Добавление элемента в список
Чтобы добавить элемент в список, используйте команду append :
{% set myList = ['a', 'b', 'c'] %}
{% append 'd' to myList %}Элемент 'd' будет добавлен в конец списка myList .
Удаление более одного элемента
Функция index возвращает индекс первого вхождения значения в списке. Если в списке может быть несколько одинаковых значений или вы не уверены, что значение есть в списке, используйте управление потоком или фильтрацию.
{# Инициализируем myList с некоторыми значениями #}
{% set myList = [1, 5, 3, 4, 2] %}
{# добавляем 5 в myList #}
{% append 5 to myList %}
{# удаляем второй элемент из списка #}
{% set temp = myList.pop(1) %}
{# находим индекс числа 2 в myList #}
{% set myIndex = myList.index(2) %}
{# удаляем число 2 из myList #}
{% set temp = myList.pop(myIndex) %}
{# выводим список и индекс числа 1 #}
{{ "values in my list:"}}
{{ myList }}
{% set indexOne = myList.index(1) %}
{{ "</br> index of the number one:" }}
{{ indexOne }}На выходе получим:
Кортежи — это еще одна структура данных в Jinja. Они похожи на списки, но неизменяемы, то есть их нельзя изменить после создания. Кортежи используются только для чтения.
Создание кортежа
Определите кортеж с помощью круглых скобок:
{% set myPair = ("dog", "cat") %}Этот кортеж содержит два значения:"dog" и "cat" . Кортежи также индексируются с 0.
Доступ к элементам кортежа
Чтобы получить доступ ко второму элементу "cat" :
{{ myPair[1] }}Создание кортежа с одним элементом
Если вам нужен кортеж с одним элементом, добавьте запятую после значения:
{% set mySingleton = ("myString",) %}Теперь вы знаете, как использовать списки и кортежи в Jinja для работы с данными.
Словари — это еще одна структура данных в Jinja. Они похожи на списки, но используются для хранения значений в виде пар "ключ-значение". Вместо индексов, как в списках, словари используют ключи для доступа к значениям.
Определение и использование словаря
Чтобы создать словарь, используйте фигурные скобки:
{% set myDict = {"Animal": "Duck", "Breed": "American Pekin"} %}Доступ к значениям
Используйте ключ, чтобы получить значение из словаря:
{{ myDict["Animal"] }} {# Вернет "Duck" #}Пример:
{% set myDict = {"Animal": "Duck", "Breed": "American Pekin"} %}
{{ myDict["Animal"] }} {# Выведет "Duck" #}Важно! Ключи в словарях могут быть не только строками, но и целыми числами, числами с плавающей точкой или даже значением none .
Теперь вы знаете, как использовать словари в Jinja для хранения и доступа к значениям по ключам.
Другие статьи про Jinja:
Базовый синтаксис Jinja
Фильтры в Jinja
Персонализация с помощью Jinja
Полезные заготовки Jinja-кода