Синтаксис

Общая информация о синтаксисе

Синтаксис может использоваться в следующих Слотах:

  • 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 концепции:

  1. Выражение. Заключаются в двойные фигурные скобки.

    1. {{ client_message }}

    2. {{ number * 10 }}

    3. {{ chat_id == ‘abcde0123456789’ }}

    4. {{ uuid4() }}

    5. {{ some_variable is defined }}

  2. Выражение с управляющей конструкцией. Заключаются в фигурные скобки с символом %.https://jinja.palletsprojects.com/en/3.0.x/templates/#list-of-control-structures

  3. Примеры:

    1. {% if client_message == ‘привет’ %}Hi{% else %}Bye{% endif %}

    2. {% for number in [1, 2, 3] %}{{ number }}{% endfor %}

Тип данных
Memory
Примеры вывода в текстовом слоте
Примечание

Строки

  • {{ '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"} ]

{% for type, items in items|groupby('type') %}{{ type }}:{% for item in items %}{{ item.name }} {% endfor %}{% endfor %}

Результат: 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 }}

{% for i in [{'name': 'Молоко', 'quantity': '1'}, {'name': 'Яблоки', 'quantity': '4'}, {'name': 'Печенье', 'quantity': '1'}] %}{{ loop.index }}{{ ') ' }}{{ i.name }} {{ i.quantity }} {% endfor %}

Результат:1) Молоко 12) Яблоки 43) Печенье 1

Номер итерации с начала цикла (0 проиндексирован)

loop.index0

{{ loop.index0 }}

{% for i in ['A','B','C'] %}{{ loop.index0 }}{{ ': ' }}{{ i }}{% endfor %}

Результат:0: A1: B2: C.

Номер итерации с конца цикла (1 проиндексирована)

loop.revindex

{{ loop.revindex }}

dict = {{ {'one': 'A', 'two': 'B', 'three': 'C'} }}

{% for i in dict %}{{ loop.revindex }}{{ ': ' }}{{ i }}{{ ' is ' }}{{ dict[i] }}{% endfor %}

Результат:3: one is A2: two is B1: three is C.

Номер итерации с конца цикла (0 проиндексирован)

loop.revindex0

{{ loop.revindex0 }}

{% for i in ['apple','orange','cherry'] %}{{ loop.revindex0 }}{{ ' | ' }}{{ i }}{% endfor %}

Результат:2 | apple1 | orange0 | cherry.

Истина, если первая итерация

loop.first

{{ loop.first }}

{% for i in ['a','b','c','d','e'] %}{% if loop.first == true %}{{ i }}{{ ' is first' }}{% endif %}{% endfor %}

Результат: a is first.

Истина, если последняя итерация

loop.last

{{ loop.last }}

{% for i in ['a','b','c','d','e'] %}{% if loop.last == true %}{{ i }}{{ ' is last' }}{% endif %}{% endfor %}

Результат: e is last.

Количество элементов в последовательности

loop.length

{{ loop.length }}

{% for i in ['a','b','c','d','e'] %}{% if loop.last == true %}{{ 'длина: '}}{{ loop.length }}{% endif %}{% endfor %}

Результат: длина: 5.

Циклическое перемещение внутри объекта

loop.cycle

{{ loop.cycle }}

dict = {{ {'one': 'A', 'two': 'B', 'three': 'C'} }}

{% for i in dict %}{{ loop.cycle }}{{ dict[i] }}{% endfor %}

Результат: >A>B>C.

Глубина рекурсивного цикла (начиная с уровня 1)

loop.depth

{{ loop.depth }}

{% for i in [1,2,3] %}{% if loop.last == true %}{{ 'глубина: '}}{{ loop.depth }}{% endif %}{% endfor %}

Результат: глубина: 1.

Глубина рекурсивного цикла (начиная с уровня 0)

loop.depth0

{{ loop.depth0 }}

{% for i in [1,2,3] %}{% if loop.last == true %}{{ 'глубина: '}}{{ loop.depth0 }}{% endif %}{% endfor %}

Результат: глубина: 0.

Получение значения из предыдущей интерации цикла

loop.previtem

{{ loop.previtem }}Важно: элемент не определен, если итерация является первой.

{% for i in [1,2,3] %}{% if loop.first == false %}{{ 'предыдущий элемент: '}}{{ loop.previtem }}{% endif %}{% endfor %}

Результат:предыдущий элемент: 1предыдущий элемент: 2.

Получение значения из следующей интерации цикла

loop.nextitem

{{ loop.nextitem }}Важно: элемент не определен, если итерация является последней.

{% for i in [1,2,3] %}{% if loop.last == false %}{{ 'следующий элемент: '}}{{ loop.nextitem }}{% endif %}{% endfor %}

Результат:следующий элемент: 2следующий элемент: 3.

Проверка изменялось ли значение переменной

loop.changed(val)

{{ loop.changed(A) }}

mass = [{'k': 3, 'v': 2}, {'k': 2, 'v': 3}, {'k': 2, 'v': 2}]

{% for row in mass %}{% if loop.changed(row.k) == true %}{{ row.k }}{% endif %}{% endfor %}

Результат:32.

Оператор
Обозначение
Область применения
Как использовать
Пример

Условные конструкции

if, elif, else, endif

Любые контекстные переменные

Для более больших условий, нежели if-выражения, например, для слота Text:{% if ... %}A{% else %}B{% endif %}Могут использоваться elif и else.

{% if current_time > 18 %}Добрый вечер!{% else %}Добрый день!{% endif %}

Результат: ‘Добрый вечер!’, если переменная current_time содержит значение более 18.‘Добрый день!’, если переменная current_time содержит значение менее либо равное 18.

Оператор
Обозначение
Область применения
Как использовать
Пример

Применяет фильтр по отношению к блоку данных шаблона

filter, endfilter

Любые контекстные переменные

Аналогично выражениям с использованием фильтров, только для более больших условий{% filter <фильтр> %} TEXT{% endfilter %}Фильтры: https://coda.io/d/_d_pM7PjYCmj#_tuKuk

{% filter upper %}    This text becomes uppercase{% endfilter %}

Результат: THIS TEXT BECOMES UPPERCASE.

Оператор
Обозначение
Область применения
Как использовать
Пример

Присваивает значение операнду

set

Любые контекстные переменные

  • {% set A = B%}

{% set x = 'apples' if age is even else 'oranges' %}{{ x }}

Результат: ‘apples’, если переменная age содержит четное число.‘oranges’, если переменная age содержит нечетное число.

Ошибки при рендеринге Шаблонов

Формат текста предупреждения:

Invalid template syntax:Slot <id проблемного слота>. Error “<описание ошибки>” in expression “<проблемное выражение>”

Пример:

Invalid template syntax:Slot 8848840. Error “unexpected char '@' at 3” in expression “{{ @foo }}”

Расшифровка ошибки: в Слоте 8848840 обнаружена ошибка — лишний символ '@' с порядковым номером 3 в выражении {{ @foo }}.

Важно: отсчет порядковых номеров символов в проблемном выражении начинается с 0.

Last updated