Python шаблонизатор Jinja
Jinja - это движок шаблонов для Python. Он похож на движок шаблонов Django.
Механизм шаблонов Jinja или процессор шаблонов - это библиотека, предназначенная для объединения шаблонов с моделью данных с целью создания документов. Механизмы шаблонов часто используются для создания большого количества электронных писем, при предварительной обработке исходного кода или создании динамических HTML-страниц. И в сегодняшней статье мы реализуем данные примеры.
Мы создаем механизм шаблонов, в котором определяем статические и динамические детали. Динамические части позже заменяются данными. Функция визуализации позже объединяет шаблоны с данными.
И прежде чем перейти к примерам вспомним форматирование строк в Python.
site = "myrusakov"
domen = "ru"
"{0}.{1}".format(site,domen)
# вывод
myrusakov.ru
Аналогичная логика поддерживается и в Jinja.
Установка Jinja
>>pip3 install jinja
Разделители Jinja
Jinja использует различные разделители в строках шаблона.
{%%} - для выражений или логики (например, для циклов)
{{}} - используется для вывода результатов выражения или переменной конечному пользователю.
{##} - комментарии, которые не включены в выходные данные шаблона
### - операторы строки
Простой пример Jinja
# sample.py
# импорт объекта Template, для вычисления и подстановки шаблонов
from jinja2 import Template
site = "myrusakov"
domen = "ru"
tm = Template("My site name is {{ site }}.{{ domen }}")
msg = tm.render(site=site, domen=domen)
print(msg)
# запуск
>>> python sample.py
My site name is myrusakov.ru
В примере запрашивается имя пользователя и генерируется строка сообщения, которая выводится пользователю. Как мы уже сказали выше, механизм шаблонов аналогичен методу Python format(); но он более мощный и имеет гораздо больше возможностей.
В нашем шаблоне у нас есть синтаксис {{}}, который используется для печати переменной. Переменная передается в методе render().
С помощью метода render() мы генерируем конечный результат. Метод соединяет строку шаблона с данными, переданными в качестве аргумента. Переменная, которая передается методу render(), называется контекстной.
Точно также можно работать и с объектами классов и словарей, просто указав нужные поля.
Сырые данные Jinja
Мы можем использовать маркеры raw-endraw, чтобы экранировать разделители Jinja.
from jinja2 import Template
data = '''
{% raw %}
His name is {{ name }}
{% endraw %}
'''
tm = Template(data)
msg = tm.render(name='Peter')
print(msg)
# вывод
His name is {{ name }}
И конечно же всю мощь данного шаблонизатора можно увидеть в сочетании с таким web-фреймворком, как Flask.
Таким образом, мы рассмотрели язык шаблонов Jinja для Python и создали простой шаблон, аналогичный методу format.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.