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.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.