Структура данных в Jinja

Используйте более сложные структуры данных в Jinja для хранения большого количества переменных под одним названием.

Иногда нужно хранить несколько значений одного типа с одинаковым применением. Например, у вас есть множество товаров, которые вы хотите показать клиенту в письме. Создание отдельной переменной для каждого из них было бы слишком трудоемким.

Поэтому в Jinja есть более сложные структуры данных для таких случаев. Эти структуры данных представляют собой набор переменных, хранящихся вместе под одним именем. Они также предоставляют полезные дополнительные функции. В этой статье мы рассмотрим три такие структуры и поможем вам понять ключевые различия между ними.

Списки

Самая простая структура данных в Jinja — это список. Список в Jinja гибкий, и вам не нужно заранее знать, сколько элементов в нём будет. Если вам нужно добавить больше элементов, список автоматически расширится.

Более того, вам не нужно беспокоиться о типах данных, которые хранятся в списке. Списки могут содержать любые типы данных, то есть вы можете смешивать разные типы данных в одном списке.

Создание элементов в списке

Чтобы создать список в Jinja, используйте нотацию {% set myList = %} . Для создания списка используйте квадратные скобки. Внутри скобок укажите значения через запятую. Вы также можете создать пустой список, просто оставив скобки пустыми.

Пример создания списка с элементами:

{% set numbersOneToFive = [1, 2, 3, 4, 5] %}

Пример создания пустого списка: 

{% set emptyList = [] %}


Доступ к элементам в списке

Списки в Jinja индексируются, что значит, у каждого элемента есть свой порядковый номер — индекс. Индексы начинаются с 0. Это позволяет легко получить доступ к любому элементу списка.

Для примера создадим следующий список:

{% set myList = ['a', 'b', 'c', 'x', 'k'] %}
  • 'a' — первый элемент, его индекс 0.
  • 'k' — пятый элемент, его индекс 4.

Используйте квадратные скобки, чтобы получить элемент по его индексу.

  • Первый элемент:{{ 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 }}

На выходе получим:

  • Значения в списке: 1,3,4,5
  • Индекс числа ‘1’: 0

Кортежи

Кортежи — это еще одна структура данных в 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-кода

Работает на