Python шаблонизатор Jinja. Часть 2

0

Python шаблонизатор Jinja. Часть 2

В одной из предыдущих статей про Jinja мы рассмотрели, как при помощи языка шаблонов можно динамически изменять строки. В сегодняшней статье мы рассмотрим данный фреймворк более подробно.

И так, с помощью шаблонизатора можно формировать документы в зависимости от введенных данных. Тоже можно сделать и с помощью форматирования строки в Python. Но при всем своем сходстве, Jinja все же является отдельным фреймворком, имея более широкий набор возможностей. И давайте посмотрим на них.

Экранирование данных

Бывает что в html документе вместо тегов нужно вывести их html-сущности такие как &lt или &gt. В подобных случаях используется метод escape():

from jinja2 import Template, escape

string = '<a>Myrusakov</a>'

# Конструкция string | e  экранирует символы <>
tm = Template("{{ string | e}}")
msg = tm.render(string=string)

print(msg)

# Функция делает тоже самое
print(escape(data))

# вывод

&lt;a&gt;Myrusakov&lt;/a&gt;

Цикл for

Выражение for используется для итерации по набору данных в шаблоне.

В следующем примере используется не простой строковый шаблон, а файл .txt, загружаемый с помощью загрузчика FileSystemLoader.

Для демонстрации примера создадим файл с расширением .py


# script.py
from jinja2 import Environment, FileSystemLoader

# данные для вывода, в виде списка словарей
languages = [
    {'name': 'C', 'rating': 17}, 
    {'name': 'Java', 'rating': 11}, 
    {'name': 'Python', 'rating': 11}, 
    {'name': 'C++', 'rating': 7}, 
    {'name': 'C#', 'rating': 3}, 
    {'name': 'JavaScript', 'rating': 2}
]

# Для  корректного исполнения файла создаем папку 
# templates рядом со скриптом
file_loader = FileSystemLoader('templates')

env = Environment(loader=file_loader)

# Шаблон извлекается из каталога templates
# методом get_template
template = env.get_template('showlang.txt')

output = template.render(languages=languages)
print(output)

В файл showlang.txt помещаем:


{% for lang in languages -%}
    {{ lang.name }} {{ lang.rating }}
{% endfor %}

В файле шаблона мы используем выражение формы для перебора коллекции. Мы показываем название и рейтинг. Символ тире рядом с символами % используется для управления пробелами.

Результат:


# вывод

C           17
Java        11
Python      11
C++          7
C#           3
JavaScript   2

Таким образом, мы узнали как экранировать символы и подставлять данные в текстовый файл с Python и Jinja.

Источник

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

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

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