Шаблонизатор Jinja
Шаблонизатор Jinja является довольно распространённым способом генерации статических HTML страниц, например с его помощью работает Django.
Это текстовый шаблонизатор, поэтому он может быть использован для создания любого вида разметки, а также исходного кода.
В приложении шаблонизатор используется, к примеру в блоке "HTML-шаблон", а так же для формирования динамических заголовков визуализаторов.
Особенности работы шаблонизатора
- Шаблонизатор всегда работает с "чистыми" (не измененными) данными, которые пришли на вход блока.
- Для блоков с единичным входом (к примеру Блок "HTML-шаблон")
идентификатор корневого элемента называется
input. - Для блоков с динамическими входами (к примеру Блок "Панель OLAP") идентификатор корневого элемента называется так же, как и идентификатор входа, из которого необходимо получить данные.
- Для блоков, у которых есть и статические и динамические входы (Блок "Визуализатор JavaScript")
идентификаторами являются как и
input(для корневого элемента), так и идентификаторы добавленных входов.
Входы, которые могут перезаписывать настройки блока (к примеру вход "Привязки" блока "Таблица") недоступны для работы с шаблонизатором.
Дополнительные функции
Кроме стандартных функций шаблонизатора, в приложение добавлены некоторые дополнительные функции:
- match(<pattern>, <string>) - возвращает первое совпадение шаблона в строке.
Аналог re.match из Python;
- search(<pattern>, <string>) - возвращает совпадение шаблона в любом месте строки.
Аналог re.search из Python;
- fullmatch(<pattern>, <string>) - возвращает объект, если строка полностью совпадает с шаблоном.
Аналог re.fullmatch из Python;
- pretty(<row>) - преобразует строку в json c форматированием и отступами;
- linearize(<row>) - преобразует строку в json (без форматирования);
- to_list(<context>) - преобразует данные в массив элементов, если это возможно. В противном случае - выдаст ошибку;
- to_dict(<context>) - преобразует данные в словарь, если это возможно. В противном случае - выдаст ошибку;
- to_options(<row>, <to_string>) - приводит ряд с данными к формату данных, использующихся в визуализаторах (таблицах
и диаграммах);
- to_string - флаг форматирования данных в строковый тип;
- now(<mask>) - получение текущего времени сервера;
- mask - маска даты для отображения. Не обязательное. Подробнее см.
документация по формированию маски даты (английский язык);
- utcnow(<mask>) - получение текущего времени сервера в формате UTC;
- mask - маска даты для отображения. Аналогично now();
- timezone() - получение часового пояса. Отображение приходит в виде строки формата (+/-)HHMM, к примеру +0500 (часовой пояс Екатеринбурга);
Полезные ссылки
- Документация Jinja - https://jinja.palletsprojects.com/en/3.0.x/
- Маски даты Python - https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior
Примеры
Постановки
- VISMIND-8859 Унификация jinja-шаблонов в заголовках визуализаторов
- VISMIND-11024 Возможность получить текущее время в шаблонизаторе Jinja
Дополнительно
При работе с данными из других блоков необходимо знать внутреннюю структуру приходящих на вход данных для корректного отображения с использованием шаблона.