Синтаксис
Общая информация о синтаксисе
Синтаксис может использоваться в следующих Слотах:
Text: допустимо использование Выражение и Выражение с управляющей конструкцией в поле Text List
Attachment: допустимо использование Выражение и Выражение с управляющей конструкцией в полях Source и Caption
Slot Filling: допустимо использование Выражение и Выражение с управляющей конструкцией в поле Question
button: допустимо использование Выражение в поле Label
condition: допустимо использование Выражение в поле Condition
Timer: допустимо использование Выражение в поле If
Memory: допустимо использование Выражение и Выражение с управляющей конструкцией в поле Value
External Request: допустимо использование Выражение и Выражение с управляющей конструкцией в полях URL, Value на вкладке Headers и Query parameters, Data, поле Name на вкладке Response
Incoming Request: допустимо использование Выражение и Выражение с управляющей конструкцией в поле Value
Synonym: допустимо использование Выражение и Выражение с управляющей конструкцией в поле Source
Синтаксис Платформа использует синтаксис шаблонизатора Jinja:https://jinja.palletsprojects.com/en/3.0.x/templates/Шаблоны в синтаксисе делятся на 2 концепции:
Выражение. Заключаются в двойные фигурные скобки.
{{ client_message }}
{{ number * 10 }}
{{ chat_id == ‘abcde0123456789’ }}
{{ uuid4() }}
{{ some_variable is defined }}
Выражение с управляющей конструкцией. Заключаются в фигурные скобки с символом %.https://jinja.palletsprojects.com/en/3.0.x/templates/#list-of-control-structures
Примеры:
{% if client_message == ‘привет’ %}Hi{% else %}Bye{% endif %}
{% for number in [1, 2, 3] %}{{ number }}{% endfor %}
Строки
{{ 'string' }}
{{ "string" }}
Пустая строка: {{ '' }} или {{ "" }}
string Пустая строка выводится в виде отсутcтвия значения
Если строка обрамлена двойными кавычками и внутри строки присутствует символ двойных кавычек в качестве знака препинания, то символ кавычек внутри строки необходимо экранировать символом \ для прохождения Валидация сценария и корректного отображения. Пример: {{ "кинотеатр \"Победа\" " }} Если строка обрамлена одинарными кавычками и внутри строки присутствует символ одинарных кавычек в качестве знака препинания, то символ кавычек внутри строки необходимо экранировать символом \ для прохождения Валидация сценария и корректного отображения. Пример: {{ 'I\'ve made an order' }} В случаях, когда строка обрамлена двойными кавычками и внутри строки присутствует символ одинарных кавычек, либо если строка обрамлена одинарными кавычками и внутри строки присутствует символ двойных кавычек, экранирование не требуется.
Числа
{{ 5 }}
{{ 42.23 }}
5
42.23
Булевы
{{ true }}
{{ false }}
True
False
Отсутствие значения
{{ None }}
Выводится в виде отсутcтвия значения
Объекты
{{ {"one": 1, "two": 2, "colors": ["red", "green", "blue"]} }}
{"one": 1, "two": 2, "colors": ["red", "green", "blue"]}
В Платформа доступны Зарезервированные методы объектов: Зарезервированные методы объектов
Массивы
Чисел: [1, 2, 3, 4, 5]
Строк: ["one", "two", "three"]
Массивов: [["one", "two", "three"], ["cat", "dog", "bird"], ["green", "blue", "red"]]
[1, 2, 3, 4, 5]
["one", "two", "three"]
[['one', 'two', 'three'], ['cat', 'dog', 'bird'], ['green', 'blue', 'red']]
Через точку (.) происходит обращение к элементам массивов;
Обращение к соответствующему номеру элемента массива происходит с помощью чисел. Нумерация элементов массива начинается с нуля, поэтому обращение к первому элементу массива обозначается как 0.
Примеры: {{ array.0 }}
Даты
Привести данные к формату даты возможно только с помощью фильтра string_to_time Пример: {{ "2000-06-15 18:50:47" | string_to_time("%Y-%m-%d %H:%M:%S") }} Подробнее: Преобразование строки в дату
2000-06-15 18:50:47
Часовой пояс не хранится
items
Да
Возвращает пары "ключ-значение" словаря.
{{ data.items() }}
{{ data.items() | list }}
Результат: [('a', 1), ('b', 2)]
keys
Да
Возвращает ключи словаря
{{ data.keys() }}
{{ data.keys() | list }}
Результат: ['a', 'b']
values
Да
Возвращает значения словаря
{{ data.values() }}
{{ data.values() | list }}
Результат: [1, 2]
clear
Нет
copy
Нет
fromkeys
Нет
get
Нет
pop
Нет
popitem
Нет
setdefault
Нет
update
Нет
Важно: при парсинге Входящий запрос, ответа на Внешний запрос или на Notification обращение к ключу объекта, если его имя совпадает с именем Зарезервированные методы объектов происходит через квадратные скобки и кавычки. Пример: {{ data["keys"] }}
Выражения
Строка
"string"
Объявление строки
Объявление пустой строки
Объявление строки
Пустая строка
{{ '' }} или {{ "" }}
Непустая строка
{{ 'str' }} или {{ "str" }}
Обращение к символам строкиstr == {{ 'string' }}{{ str[0] }} = s{{ str[1] }} = t...Срез строкиstr == {{ 'string' }}{{ str[:2] }} = st{{ str[2:] }} = ring{{ str[2:5] }} = rin
{{ 'Hello World' }}
Результат: Hello World.
{{ "Hello World" }}
Результат: Hello World.
{{ 'Hello World'[1] }}
Результат: e.
{{ 'Hello World'[:5] }}
Результат: Hello.
{{ 'Hello World'[5:] }}
Результат: World.
Целое число
42
123_456
Объявление целого числа
{{ num }}
{{ 123 }}
Результат: 123.
{{ 1_2_3 }}
Результат: 123.
Число с точкой
42.23
42.1e2
123_456.789
Объявление вещественного числа
{{ num }}
{{ 42.23 }}
Результат: 42.23.
{{ 42.1e2 }}
Результат: 4210.0.
{{ 4_2.23 }}
Результат: 42.23.
Списки
['list', 'of', 'objects']
Объявление списка с произвольными типами объектов
Обращение к элементу из списка
Объявление списка
Пустой список
{{ [] }}
Список чисел
{{ [num1, num2, ...] }}
Список строк
{{ ['str1','str2', ...] }}{{ ["str1","str2", ...] }}
Обращение к элементам спискаlist = {{ [A, B, ...] }}{{ list[0] }} = A{{ list[1] }} = B...
{{ [1, 2, 3] }}
Результат: [1, 2, 3].
{{ ['one', 'two'] }}
Результат: ['one', 'two'].
{{ ['one', 'two'] }}[0]
Результат: one.
Словари
{'dict': 'of', 'key': 'and', 'value': 'pairs'}
Объявление словаря
Обращение к элементу из словаря
Объявление словаря{{ { key1:val1, key2:val2, ... } }}Обращение к элементам словаряdict = {{ { key1:val1, key2:val2, ... } }}{{ dict[key1] }} = val1{{ dict[key2] }} = val2...
{{ {1:'A', 2:'B', 3:'C'} }}
Результат: {1: 'A', 2: 'B', 3: 'C'}.
{{ {1:'A', 2:'B', 3:'C'}[1] }}
Результат: A.
{{ {'one': 'A', 'two': 'B', 'three': 'C'} }}
Результат: {'one': 'A', 'two': 'B', 'three': 'C'}.
{{ {'one': 'A', 'two': 'B', 'three': 'C'}['three'] }}
Результат: C.
Массивы
{{ [{'id': 3, 'name': 'O'}, {'id': 1, 'name': 'E'}, {'id': 2, 'name': 'S'}] }}
Объявление массива данных
Обращение к элементу из массива
Объявление массива{{ [{'id': id1, 'value': val1 }, {'id': id2, 'value': val2 }, ...] }}Обращение к элементам массиваarray = {{ [{'id': id1, 'value': val1 }, {'id': id2, 'value': val2 }, ...] }}{{ array[0] }} = {'id': id1, 'value': val1 }...
{{ [{'id': 3, 'name': 'O'}, {'id': 1, 'name': 'E'}, {'id': 2, 'name': 'S'}] }}
Результат: [{'id': 3, 'name': 'O'}, {'id': 1, 'name': 'E'}, {'id': 2, 'name': 'S'}].
{{ [{'id': 3, 'name': 'O'}, {'id': 1, 'name': 'E'}, {'id': 2, 'name': 'S'}] [0] }}
Результат: {'id': 3, 'name': 'O'}.
Булевы значения
true
false
Выражения и булевы переменные
{{ true }}
{{ false }}
{{ А == true }}
Результат: True, если булева переменная A истинна.
{{ (A == B) == true }}
Результат: True, если выражение (A == B) истинно.
Сложение
+
Сложение целых и вещественных чисел
Конкатенация строк
Объединение элементов массивов в один массив
{{ num1 + num2 + ... }}
{{ 'str1' + 'str2' + ... }}
{{ "str1" + "str2" + ... }}
{{ mas1 + mas2 + ... }}
{{ 1 + 2 + 3 }}
Результат: 6.
{{ 'a' + 'b' + 'c' }}
Результат: abc.
{{ 0.5 + 1.5 }}
Результат: 2.0.
{{ [0,1,2] + [3,4,5] }}
Результат: [0, 1, 2, 3, 4, 5].
Вычитание
-
Вычитание целых и вещественных чисел
{{ num1 - num2 - num3 - ... }}
{{ 4 - 2 - 1 }}
Результат: 1.
{{ 0.5 - 1.5 }}
Результат: -1.0.
Деление
/
Деление целых и вещественных чисел
{{ num1 / num2 / num3 / ... }}
{{ 1 / 2 }}
Результат: 0.5.
{{ -1.5 / 0.5 }}
Результат: -3.0.
{{ 6 / 3 / 2 }}
Результат: 1.0.
Деление, при котором будет возвращена только целая часть результата
//
Деление целых и вещественных чиселОграничения:Оператор // возвращает целое число только при делении целых чисел. Если одним из операндов является вещественное число, то результатом также будет вещественное число.
{{ num1 // num2 // num3 // ... }}
{{ 6 // 3 // 2 }}
Результат: 1.
{{ 1.5 // 0.5 }}
Результат: 3.0.
Вычисление остатка от деления
%
Вычисление остатка от деления целых и вещественных чисел
{{ num1 % num2 }}
{{ 6 % 4 }}
Результат: 2.
{{ 1.5 % 0.5 }}
Результат: 0.0.
Умножение
*
Умножение целых и вещественных чисел
{{ num1 * num2 * num3 * ... }}
{{ -1.5 * -0.5 }}
Результат: 0.75.
{{ -2 * 3 * 4 }}
Результат: -24.
Ограничения:
Максимальное число (по модулю), которое можно использовать в арифметических операциях — 4294967296 . Если использовать большие числа, то будет ошибка (в memory в переменную сохранится False, например).
Если складывать строки / массивы, то максимально допустимая длина строки / массива — 1000 . При попытке сложения/конкатенации строк/массивов, дающих результат длиннее 1000 символов, в Контекстная переменная error записывается значение “Addition of objects with length greater than 1000 is not allowed”.
Для конкатенации строк/массивов, дающих результат длиннее 1000 символов, можно использовать запись {{ string_1 }}{{ string_2 }}.
Проверка равенства
==
Любые контекстные переменные и значения
{{ A == B }}
{{ A == B }}
Результат: True, если переменная A равна переменной B.
{{ A == 1 }}
Результат: True, если переменная A равна 1.
{{ A == 'один' }}
Результат: True, если переменная A равна 'один'.
Проверка неравенства
!=
Любые контекстные переменные и значения
{{ A != B }}
{{ A != B }}
Результат: True, если переменная A не равна переменной B.
{{ A != 1 }}
Результат: True, если переменная A не равна 1.
{{ A != 'один' }}
Результат: True, если переменная A не равна 'один'.
Проверка, что первый операнд больше второго
>
Числовые переменные и числа
{{ A > B }}
{{ A > B }}
Результат: True, если переменная A больше переменной B.
{{ A > 1 }}
Результат: True, если переменная A больше 1.
Проверка, что первый операнд больше либо равен второго
>=
Числовые переменные и числа
{{ A >= B }}
{{ A >= B }}
Результат: True, если переменная A больше или равна переменной B.
{{ A >= 1 }}
Результат: True, если переменная A больше или равна 1.
Проверка, что первый операнд меньше второго
<
Числовые переменные и числа
{{ A < B }}
{{ A < B }}
Результат: True, если переменная A меньше переменной B.
{{ A < 1 }}
Результат: True, если переменная A меньше 1.
Проверка, что первый операнд меньше либо равен второго
<=
Числовые переменные и числа
{{ A <= B }}
{{ A <= B }}
Результат: True, если переменная A меньше или равна переменной B.
{{ A <= 1 }}
Результат: True, если переменная A меньше или равна 1.
“И”
and
Выражения и булевы переменные
{{ A and B }}
{{ A and B }}
Результат: True, если если обе булевы переменные A и B истинны.
"ИЛИ”
or
Выражения и булевы переменные
{{ A or B }}
{{ A or B }}
Результат: True, если если одна из булевых переменных A и B истинны.
"НЕ”
not
Выражения и булевы переменные
{{ not A }}
{{ not A }}
Результат: True, если если булева переменная A ложна.
{{ not A == 1 }}
Результат: False, если переменная A равна 1.
Скобки для группировки выражения
(expr)
Выражения и булевы переменные
{{ (A) }}
{{ (A > 0) and (A < 10) }}
Результат: True, если переменная A больше 0 и меньше 10.
Поиск первого операнда во втором
in
Контекстные переменные и выражения
Строка
{{ 's' in 'str' }}
Список чисел
{{ num in [num1,num2,...] }}
Список строк
{{ 'str' in ['str1','str2',...] }}
Словарь
{{ key in { key1:val1, key2:val2, ... } }}
{{ 'A' in 'ABC' }}
Результат: True.
{{ 1 in [1,2,3] }}
Результат: True.
{{ 'ABC' in ['ABC','DEF','GHI'] }}
Результат: True.
{{ 1 in {1: 'A', 2: 'B', 3: 'C'} }}
Результат: True.
Проверка операнда на свойство
is
Тесты
{{ A is B }}
Описано в таблице: Проверки значений переменных
Применяет фильтр по отношению к операнду
|
Фильтры
{{ A|B }}
Описано в таблице: Фильтры синтаксиса
Приведение операндов к строкам и их конкатенация
~
Контекстные переменные и строки
{{ "string" ~ var }}
{{ var ~ "string" }}
{{ "Hello " ~ name ~ "!" }}Результат: Hello John! (если переменная name содержит значение John).
Получение артибута объекта
. / []
Любые контекстные переменные
{{ A.B }}
{{ A['B'] }}
{{ ['A','B','C'].0 }}
Результат: A.
{{ {'one': 'A', 'two': 'B', 'three': 'C'}['two'] }}
Результат: B.
Проверки значений переменных
Проверка, что переменная существует в контексте
defined
{{ A is defined }}
{{ A is defined }}, A существует
Результат: True.
{{ A is defined }}, A не существует
Результат: False.
Проверка, что переменная не существует в контексте
undefined
{{ A is undefined }}
{{ A is undefined }}, A существует
Результат: False.
{{ A is undefined }}, A не существует
Результат: True.
Проверка на соответствие регулярному выражению
match
{{ A is match ... }}
{{ A is match("[regular_expression]") }} Результат:
True, если A соответствует регулярному выражению;
False, если A НЕ соответствует регулярному выражению;
False, если A имеет не строковый формат;
False, если регулярное выражение прописано некорректно
Важно: проверка чувствительна к регистру.
Проверка, что объект является числом
number
{{ A is number }}
{{ 5 is number }}
Результат: True.
{{ 'five' is number }}
Результат: False.
Проверка, что объект является четным числом
even
{{ A is even }}
{{ 22 is even }}
Результат: True.
{{ 11 is even }}
Результат: False.
Проверка, что объект является нечетным числом
odd
{{ A is odd }}
{{ 46 is odd }}
Результат: False.
{{ 15 is odd }}
Результат: True.
Проверка, что объект является целым числом
integer
{{ A is integer }}
{{ 1012 is integer }}
Результат: True.
{{ 10.12 is integer }}
Результат: False.
Проверка, что объект является вещественным числом
float
{{ A is float }}
{{ 3.55 is float }}
Результат: True.
{{ 35 is float }}
Результат: False.
Проверка, что объект делится нацело на число
divisibleby
{{ A is divisibleby(B) }}Важно:
Если A = True, а B = 1, то вернется True, т.к True это 1, а 1 делится на 1.
Если A = False, то вернется True, т.к False это 0, а 0 делится на любое число (кроме 0).
{{ 4 is divisibleby(2) }}
Результат: True.
{{ 6 is divisibleby(5) }}
Результат: False.
{{ 5 is divisibleby(0) }}
Результат: False.
{{ true is divisibleby(1) }}
Результат: True.
{{ false is divisibleby(10) }}
Результат: True.
Проверка, что объект является строкой
string
{{ A is string }}
{{ 'one' is string }}
Результат: True.
{{ 1 is string }}
Результат: False.
Проверка, что строка находится в нижнем регистре
lower
{{ A is lower }}
{{ 'hello' is lower }}
Результат: True.
{{ 'Hello' is lower }}
Результат: False.
{{ 'HELLO' is lower }}
Результат: False.
Проверка, что строка находится в верхнем регистре
upper
{{ A is upper }}
{{ 'BYE' is upper }}
Результат: True.
{{ 'Bye' is upper }}
Результат: False.
{{ 'bye' is upper }}
Результат: False.
Проверка, что объект является словарем
mapping
{{ A is mapping }}
{{ {1:'A', 2:'B', 3:'C'} is mapping }}
Результат: True.
{{ [1, 2, 3] is mapping }}
Результат: False.
Проверка, что объект является последовательностью (строкой, списком или словарем)
sequence
{{ A is sequence }}
{{ '12345' is sequence }}
Результат: True.
{{ [1, 2, 3] is sequence }}
Результат: True.
{{ {1:'A', 2:'B', 3:'C'} is sequence }}
Результат: True.
{{ 12345 is sequence }}
Результат: False.
Проверка, что объект является булевым
boolean
{{ A is boolean }}
{{ A is boolean }}, A = true
Результат: True.
{{ A is boolean }}, A = 4
Результат: False.
Проверка, что объект является истинным
true
{{ A is true }}
{{ A is true }}, A = true
Результат: True.
{{ A is true }}, A = 1
Результат: False.
Проверка, что объект является ложным
false
{{ A is false }}
{{ A is false }}, A = false
Результат: True.
{{ A is false }}, A = 2
Результат: False.
Проверка, что у объекта отсутствует значение (значение None или Null (преобразуется при парсинге ER в None))
none
{{ A is none }}
{{ A is none }}, A = none
Результат: True.
{{ A is none }}, A = ''
Результат: False.
Проверка равенства (эквивалентно оператору ==)
eq
{{ A is eq B }}
{{ 123 is eq 123 }}
Результат: True.
{{ 'abc' is eq 'ABC' }}
Результат: False.
{{ 456 is eq '456' }}
Результат: False.
Проверка неравенства (эквивалентно оператору !=)
ne
{{ A is ne B }}
{{ 123 is ne 124 }}
Результат: True.
{{ 'D' is ne 'D' }}
Результат: False.
Проверка, что первый операнд больше второго (эквивалентно оператору >)
gt
{{ A is gt B }}
{{ 5 is gt 3 }}
Результат: True.
{{ (-1.12) is gt 1.13 }}
Результат: False.
{{ '5a' is gt '33' }}
Результат: True.
{{ '222' is gt '33' }}
Результат: False.
Проверка, что первый операнд больше либо равен второго (эквивалентно оператору >=)
ge
{{ A is ge B }}
{{ 12.12 is ge 12.1199 }}
Результат: True.
{{ 15 is ge 15 }}
Результат: True.
{{ 0 is ge (-15) }}
Результат: False.
Проверка, что первый операнд меньше второго (эквивалентно оператору <)
lt
{{ A is lt B }}
{{ 0.001 is lt 1 }}
Результат: True.
{{ (-1) is lt (-1.5) }}
Результат: False.
Проверка, что первый операнд меньше либо равен второго (эквивалентно оператору <=)
le
{{ A is le B }}
{{ 21 is le 22 }}
Результат: True.
{{ (-1.11) is le (-1.11) }}
Результат: True.
{{ (1) is le (-12) }}
Результат: False.
Поиск первого операнда во втором
in
{{ A in B }}
Описано в таблице: Поиск первого операнда во втором
Фильтры синтаксиса
Добавление дефолтного значения
default
{{ A|default(B) }}
Значение B будет использоваться только в случае, если переменной A нет в контексте.
{{ A|default(B,true) }}
Значение B будет использоваться в случаях, если переменной A нет в контексте или если значение переменной A приводится к False (0, пустая строка, пустой массив, пустой список).
{{ A|default('A is not defined') }}, A = 1
Результат: 1.
{{ A|default('A is not defined') }}, A не существует
Результат: A is not defined.
{{ A|default('A is empty', true) }}, A = ''
Результат: A is empty.
{{ A|default('A is not defined', true) }},
A не существуетРезультат: A is not defined.
Преобразование в целое число
int
{{ A|int }}
{{ 2.53|int }}
Результат: 2.
{{ '-15'|int }}
Результат: -15.
{{ '12abc'|int }}
Результат: 0.
Преобразование в вещественное число
float
{{ A|float }}
{{ 2|float }}
Результат: 2.0.
{{ '-122'|float }}
Результат: -122.0.
{{ '1a'|float }}
Результат: 0.0.
Возвращение абсолютного значения числа
abs
{{ A|abs }}Ограничения: работает только с целыми и вещественными числами.
{{ -1|abs }}
Результат: 1.
{{ -0.1111|abs }}
Результат: 0.1111.
Округление числа
round
{{ A|round }}
Округление до целой части.
{{ A|round(B, C) }}
B - число знаков после запятой.C - тип округления:common - округление в большую или меньшую сторону.ceil - округление в большую сторону.floor - округление в меньшую сторону.
{{ 42.12345|round }}
Результат: 42.0.
{{ -1.538675|round(3,'common') }}
Результат: -1.539.
{{ 0.5712|round(2, 'ceil') }}
Результат: 0.58.
{{ 121.67354|round(3, 'floor') }}
Результат: 121.673.
{{ 0.11111|round|int }}
Результат: 0.
Преобразование в строку
string
{{ A|string }}
{{ 12345|string }}
Результат: 12345.
{{ [1,2,3,4,5]|string }}
Результат: [1, 2, 3, 4, 5] (весь список является строкой).
{{ {1: 'A', 2: 'B', 3: 'C'}|string }}
Результат: {1: 'A', 2: 'B', 3: 'C'} (весь словарь является строкой).
Преобразование в список
list
{{ A|list }}
{{ 'abcdefg'|list }}
Результат: ['a', 'b', 'c', 'd', 'e', 'f', 'g'].
{{ {'one': 'A', 'two': 'B', 'three': 'C'}|list }}
Результат: ['one', 'two', 'three'].
{{ 12345|list }}
Результат: False.
Преобразование в нижний регистр
lower
{{ A|lower }}
{{ 'AbcDefg'|lower }}
Результат: abcdefg.
{{ ['A','B','C']|lower }}
Результат: ['a', 'b', 'c'].
{{ {'one': 'A', 'two': 'B', 'three': 'C'}|lower }}
Результат: {'one': 'a', 'two': 'b', 'three': 'c'}.
Преобразование в верхний регистр
upper
{{ A|upper }}
{{ 'AbcDefg'|upper }}
Результат: ABCDEFG.
{{ ['a','b','c']|upper }}
Результат: ['A', 'B', 'C'].
{{ {'one': 'a', 'two': 'b', 'three': 'c'}|upper }}
Результат: {'ONE': 'A', 'TWO': 'B', 'THREE': 'C'}.
Приведение первой буквы в строке к верхнему регистру
capitalize
{{ A|capitalize }}Ограничения: работает только со строками.
{{ 'abc'|capitalize }}
Результат: Abc.
Преобразование в заглавный регистр (т.е. слова будут начинаться с прописных букв, все остальные символы будут строчными)
title
{{ A|title }}Важно: элементы списка и словаря приводятся к нижнему регистру.
{{ 'hello'|title }}
Результат: Hello.
{{ 'hELLO'|title }}
Результат: Hello.
{{ {'one': 'A', 'two': 'B', 'three': 'C'}|title }}
Результат: {'one': 'a', 'two': 'b', 'three': 'c'}.
Первый элемент последовательности (строки, списка или словаря)
first
{{ A|first }}
{{ '12345'|first }}
Результат: 1.
{{ [1, 2, 3]|first }}
Результат: 1.
{{ {1:'A', 2:'B', 3:'C'}|first }}
Результат: 1.
{{ 12345|first }}
Результат: False.
Последний элемент последовательности (строки, списка или словаря)
last
{{ A|last }}
{{ '12345'|last }}
Результат: 5.
{{ [1, 2, 3]|last }}
Результат: 3.
{{ {1:'A', 2:'B', 3:'C'}|last }}
Результат: 3.
{{ 12345|last }}
Результат: False.
Число элементов в последовательности (строке, списке или словаре)
length
{{ A|length }}
{{ 'abcdefg'|length }}
Результат: 7.
{{ [1, 2, 3]|length }}
Результат: 3.
{{ {1:'A'}|length }}
Результат: 1.
{{ 111|length }}
Результат: False.
Сумма элементов последовательности
sum
{{ A|sum }}Важно: если последовательность пустая, то возвращается 0.
{{ [1,2,3,4,5]|sum }}
Результат: 15.
{{ {1: 'A', 2: 'B', 3: 'C'}|sum }}
Результат: 6.
{{ ''|sum }}
Результат: 0.
Получение наименьшего значения элемента последовательности
min
{{ A|min }}
{{ [1, 0.001, -1]|min }}
Результат: -1.
{{ ['1', '0.001', '-1']|min }}
Результат: -1.
{{ ['b', 'f', 'a']|min }}
Результат: a.
{{ {'1': 'A', '2': 'B', '3': 'C'}|min }}
Результат: 1.
Получение наибольшего значения элемента последовательности
max
{{ A|max }}
{{ [1, 0.001, -1]|max }}
Результат: 1.
{{ ['1', '0.001', '-1']|max }}
Результат: 1.
{{ ['b', 'f', 'a']|max }}
Результат: f.
{{ {'1': 'A', '2': 'B', '3': 'C'}|max }}
Результат: 3.
Получение случайного элемента
random
{{ A|random }}Ограничения: работает только со списками и массивами.
{{ [-22, 4.110263, 353, 124]|random }}
Результат: 4.110263.
{{ ['-22', '4.110263', '353', '124']|random }}
Результат: -22.
{{ ['apple', 'orange', 'banana']|random }}
Результат: banana.
Замена элемента последовательности
replace
{{ A|replace }}
{{ "Hello World"|replace("Hello", "Goodbye") }}
Результат: Goodbye World.
{{ ['A','B','C']|replace('A', 'D') }}
Результат: ['D', 'B', 'C'].
Переворачивание последовательности
reverse
{{ A|reverse }}Важно: чтобы перевернуть список или словарь, нужно добавить |list для преобразования результата в список, иначе переменная будет пустой.
{{ 'abcdefg'|reverse }}
Результат: gfedcba.
{{ '12345'|reverse }}
Результат: 54321.
{{ ['a', 'b', 'c']|reverse|list }}
Результат: ['c', 'b', 'a'].
{{ {'1': 'A', '2': 'B', '3': 'C'}|reverse|list }}
Результат: ['3', '2', '1'].
Добавление разделителя элементов последовательности (строки, списка или словаря)
join
{{ A|join }}
{{ A|join(B) }}
{{ '123'|join(',') }}
Результат: (1, 2, 3).
{{ [1, 2, 3]|join }}
Результат: 123.
{{ {'one': 'A', 'two': 'B', 'three': 'C'}|join('!') }}
Результат: one!two!three.
{{ {1:'A', 2:'B', 3:'C'}.values()|join(", ") }}
Результат: A, B, C.
{{ {1:'A', 2:'B', 3:'C'}.keys()|join("!")|list }}
Результат: ['1', '!', '2', '!', '3'].
Преобразование последовательности в уникальный список
unique
{{ A|unique|list }}Ограничения: работает только с добавлением |list.
{{ 'abcab'|unique|list }}
Результат: gfedcba.
{{ '12345'|reverse }}
Результат: 54321.
{{ ['a', 'b', 'c']|reverse|list }}
Результат: ['c', 'b', 'a'].
{{ {'1': 'A', '2': 'B', '3': 'C'}|reverse|list }}
Результат: ['3', '2', '1'].
Сортировка последовательности
sort
{{ A|sort }}
{{ A|sort(r, c, a) }}
r(reverse) - сортировка по убыванию, а не по возрастанию.c(case_sensitive) - сортировка верхнего и нижнего регистров отдельно.a(attribute) - значение или ключ для сортировки.
{{ [1,4,3,2,5]|sort }}
Результат: [1, 2, 3, 4, 5].
{{ ['b','a','c']|sort(reverse=true) }}
Результат: ['c', 'b', 'a'].
{{ [{'id': 3, 'name': 'O'}, {'id': 1, 'name': 'E'}, {'id': 2, 'name': 'S'}]|sort(attribute='name') }}
Результат: [{'id': 1, 'name': 'E'}, {'id': 3, 'name': 'O'}, {'id': 2, 'name': 'S'}].
{{ {4: 'c', 2: 'a', 3: 'b', 1:'d'}.values()|sort }}
Результат: ['a', 'b', 'c', 'd'].
{{ {4: 'c', 2: 'a', 3: 'b', 1:'d'}.keys()|sort }}
Результат: [1, 2, 3, 4].
Сортировка словаря по ключу или значению
dictsort
{{ A|dictsort }}
{{ A|dictsort(by='key' }}
{{ A|dictsort(by='value' }}
Важно: словарь по умолчанию превращается в строку.
{% for key, value in {"c": 1, "a": 4, "b": 2, "d": 3}|dictsort %} {{ key }}: {{ value }} {% endfor %}
Результат: aaa: 4 b: 2 c: 1 d: 3.
{% for key, value in {"c": 1, "a": 4, "b": 2, "d": 3}|dictsort(by="key") %} {{ key }}: {{ value }} {% endfor %}
Результат: a: 4 b: 2 c: 1 d: 3.
{{ {4: 'c', 2: 'a', 3: 'b', 1:'d'}|dictsort(by='value')|list }}
Результат: [(2, 'a'), (3, 'b'), (4, 'c'), (1, 'd')].
Фильтрация по атрибуту
map
{{ A|map(attribute='B')|map(attribute='C'|...|list }}Важно: если объект является массивом, то результат необходимо преобразовать в список.
{{ [{'name': 'Anna', 'number': '123'}, {'name': 'Olga', 'number': '456'}, {'name': 'Evgeniya', 'number': '789'}]| map(attribute='name')|list }}
Результат: ['Anna', 'Olga', 'Evgeniya'].
Группировка по числу элементов в цикле
batch
{{ A|batch(l) }}
{{ A|batch(l, f) }}
l(linecount) - число групп, на которые будет разбит объект.f(fill_with) - значение, которое используется для заполнения отсутсвующих элементов.
{% for row in ['A','B','C']|batch(5, 'D') %}{{ row }}{% endfor %}
Результат: ['A', 'B', 'C', 'D', 'D'].
{% for row in [1, 2, 3, 4]|batch(2) %}
{% for i in row %}{{ i }}{% endfor %}{% endfor %}Результат:1234.
Преобразование в список списков
slice
{{ A|slice(s) }}
{{ A|slice(s, f) }}
s(slices) - число списков, на которые будет разбит объект.f(fill_with) - значение, которое используется для заполнения отсутсвующих элементов.
{{ [1, 2, 3, 4, 5]|slice(2)|list }}
Результат: [[1, 2, 3], [4, 5]].
{{ 'abc'|slice(5, 'd')|list }}
Результат: [['a'], ['b'], ['c'], ['d'], ['d']].
Группировка по атрибуту
groupby
{{ A|groupby(a) }}
{{ A|groupby(a, d) }}
a(attribute) - атрибут.d(default) - значение по умолчанию, использующееся, если объект в списке не имеет данного атрибута.
items = [ {"name": "james", "type": "green"}, {"name": "john", "type": "blue"}, {"name": "jim", "type": "blue"}, {"name": "jessie", "type": "green"} ]
Результат: blue: john jim green: james jessie.
Удаление элементов последовательности, которые не соответствуют тесту
select
{{ A|select(B,C)|list }}B - тест из таблицы Проверки значений переменных.C - аргумент, который передается в тест B.
{{ [1, 2, 3, 4, 5]|select('odd')|list }}
Результат: [1, 3, 5] (нечетные числа).
{{ [1, 2, 3, 4, 5]|select('gt', 3)|list }}
Результат: [4, 5] (числа, которые больше 3).
Удаление элементов последовательности, которые не соответствуют тесту по атрибуту
selectattr
{{ A|selectattr(B,C,D)|list }}B - атрибут, который необходимо достать из последовательности.C - тест из таблицы Проверки значений переменных.D - аргумент, который передается в тест С.
users = [ {"name": "james", "email": "james@james.com", "password": "123"}, {"name": "john", "email": "john@john.com"}, {"name": "jim", "email": "jim@jim.com"}, {"name": "jessie", "email": "jessie@jessie.com", "password": "123"} ] .
{{ users|selectattr('password','undefined')| map(attribute='email')|list }}{{ email }}Результат: ['john@john.com', 'jim@jim.com'].
table = [['685697115', 'evpolyntseva', 'Новосибирск'], ['658795243', 'Iourigaha', 'Москва'], ['683128920', 'jarondara', 'Казань'], ['630685929', 'blarar', 'Москва']] .
{{ table_all|selectattr(2, 'eq', "Москва")|map(attribute=1)|list }}Результат: ['Iourigaha', 'blarar'].
Удаление элементов последовательности, которые соответствуют тесту
reject
{{ A|reject(B,C)|list }}B - тест из таблицы Проверки значений переменных .C - аргумент, который передается в тест B.
{{ [1, 2, 3, 4, 5]|reject('odd')|list }}
Результат: [2, 4] (не нечетные числа).
{{ [1, 2, 3, 4, 5]|reject('gt', 3)|list }}
Результат: [1, 2, 3] (числа, которые не больше 3).
Удаление элементов последовательности, которые соответствуют тесту по атрибуту
rejectattr
{{ A|rejectattr(B)|list }}B - атрибут, который необходимо достать из последовательности.C - тест из таблицы Проверки значений переменных .D - аргумент, который передается в тест С.
table = [['685697115', 'evpolyntseva', 'Новосибирск'], ['658795243', 'Iourigaha', 'Москва'], ['683128920', 'jarondara', 'Казань'], ['630685929', 'blarar', 'Москва']] .
{{ table|selectattr(2, 'eq', "Москва")|map(attribute=1)|list }}Результат: ['evpolyntseva', 'jarondara'].
Удаление символов в начале и конце строки
trim
{{ A|trim }}
{{ A|trim(c) }}
c(chars) - символ или строка, которые будут удалены. По умолчанию пробел.
{{ ' a '|trim }}
Результат: a.
{{ 'bbbсbb'|trim('b') }}
Результат: c.
Усечение строки
truncate
{{ A|truncate(len) }}
{{ A|truncate(len,k,e,l) }}
len(length) - длина урезанной строки. По умолчанию 255.k(killwords) - True или False. True указывается если нужно обрезать строку по длине, False если нужно отбросить последнее обрезаемое слово.e(end) - знак на месте усечения. По умолчанию многоточие.l(leeway) - предел превышения длины.
{{ 'foo bar baz qux'|truncate(9) }}
Результат: foo... .
{{ 'foo bar baz qux'|truncate(9, True) }}
Результат: foo ba... .
{{ 'foo bar baz qux'|truncate(11, False, '', 0) }}
Результат: foo bar.
Подсчет слов
wordcount
{{ A|wordcount }}
{{ 'Hello World!'|wordcount }}
Результат: 2.
{{ ['a a a','b','c']|wordcount }}
Результат: 5.
{{ {'one': 'a', 'two': 'b b b', 'three': 'c'}|wordcount }}
Результат: 8.
Форматирование числа в размер файла
filesizeformat
{{ A|filesizeformat }}
{{ 100000 | filesizeformat }}
Результат: 100.0 kB.
{{ 25000000 | filesizeformat }}
Результат: 25.0 MB.
Кодирование в URL
urlencode
{{ A|urlencode }}Важно: работает только со строками и словарями.
{{ 'привет'|urlencode }}
Результат: %D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82.
{{ {"aaa": "привет", "bbb": 1}|urlencode }}
Результат: aaa=%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82&bbb=1.
Преобразование строки в дату
string_to_time
{{ "2000-06-15 18:50:47" | string_to_time("%Y-%m-%d %H:%M:%S") }} После string_to_time в скобках указывается необходимый формат даты. Подробнее: https://docs.python.org/3/library/datetime.html?highlight=datetime#strftime-and-strptime-format-codes
{{ "2000-06-15 18:50:47" | string_to_time("%Y-%m-%d %H:%M:%S") }} Результат: 2000-06-15 18:50:47 (тип данных — дата)
Преобразование даты в строку
time_to_string
{{ "2000-06-15 18:50:47" | time_to_string("%Y-%m-%d %H:%M:%S") }} После time_to_string в скобках указывается необходимый формат даты. Подробнее: https://docs.python.org/3/library/datetime.html?highlight=datetime#strftime-and-strptime-format-codes
{{ "2000-06-15 18:50:47" | time_to_string("%Y-%m-%d %H:%M:%S") }} Результат: 2000-06-15 18:50:47 (тип данных — строка)
Выражения с управляющими конструкциями
Пройти циклом по каждому элементу последовательности
for, in, endfor
Любые контекстные переменные
{% for A in B %}{{ ... }}{% endfor %}Важно: цикл может быть максимум двойной вложенности.Внутри циклов можно использовать дополнительные переменные для проверки значений: https://coda.io/d/_d_pM7PjYCmj#_tuYU1
{% for number in [1, 2, 3] %}{{ number }}{% endfor %}Результат: 123.
Номер итерации с начала цикла (1 проиндексирована)
loop.index
{{ loop.index }}
Результат:1) Молоко 12) Яблоки 43) Печенье 1
Номер итерации с начала цикла (0 проиндексирован)
loop.index0
{{ loop.index0 }}
Результат:0: A1: B2: C.
Номер итерации с конца цикла (1 проиндексирована)
loop.revindex
{{ loop.revindex }}
dict = {{ {'one': 'A', 'two': 'B', 'three': 'C'} }}
Результат:3: one is A2: two is B1: three is C.
Номер итерации с конца цикла (0 проиндексирован)
loop.revindex0
{{ loop.revindex0 }}
Результат:2 | apple1 | orange0 | cherry.
Истина, если первая итерация
loop.first
{{ loop.first }}
Результат: a is first.
Истина, если последняя итерация
loop.last
{{ loop.last }}
Результат: e is last.
Количество элементов в последовательности
loop.length
{{ loop.length }}
Результат: длина: 5.
Циклическое перемещение внутри объекта
loop.cycle
{{ loop.cycle }}
dict = {{ {'one': 'A', 'two': 'B', 'three': 'C'} }}
Результат: >A>B>C.
Глубина рекурсивного цикла (начиная с уровня 1)
loop.depth
{{ loop.depth }}
Результат: глубина: 1.
Глубина рекурсивного цикла (начиная с уровня 0)
loop.depth0
{{ loop.depth0 }}
Результат: глубина: 0.
Получение значения из предыдущей интерации цикла
loop.previtem
{{ loop.previtem }}Важно: элемент не определен, если итерация является первой.
Результат:предыдущий элемент: 1предыдущий элемент: 2.
Получение значения из следующей интерации цикла
loop.nextitem
{{ loop.nextitem }}Важно: элемент не определен, если итерация является последней.
Результат:следующий элемент: 2следующий элемент: 3.
Проверка изменялось ли значение переменной
loop.changed(val)
{{ loop.changed(A) }}
mass = [{'k': 3, 'v': 2}, {'k': 2, 'v': 3}, {'k': 2, 'v': 2}]
Результат:32.
Условные конструкции
if, elif, else, endif
Любые контекстные переменные
Для более больших условий, нежели if-выражения, например, для слота Text:{% if ... %}A{% else %}B{% endif %}Могут использоваться elif и else.
Результат: ‘Добрый вечер!’, если переменная current_time содержит значение более 18.‘Добрый день!’, если переменная current_time содержит значение менее либо равное 18.
Применяет фильтр по отношению к блоку данных шаблона
filter, endfilter
Любые контекстные переменные
Аналогично выражениям с использованием фильтров, только для более больших условий{% filter <фильтр> %} TEXT{% endfilter %}Фильтры: https://coda.io/d/_d_pM7PjYCmj#_tuKuk
Результат: THIS TEXT BECOMES UPPERCASE.
Присваивает значение операнду
set
Любые контекстные переменные
{% set A = B%}
Результат: ‘apples’, если переменная age содержит четное число.‘oranges’, если переменная age содержит нечетное число.
Ошибки при рендеринге Шаблонов
Формат текста предупреждения:
Пример:
Расшифровка ошибки: в Слоте 8848840 обнаружена ошибка — лишний символ '@' с порядковым номером 3 в выражении {{ @foo }}.
Важно: отсчет порядковых номеров символов в проблемном выражении начинается с 0.
Last updated