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

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

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.

Источник

НЕТ КОММЕНТАРИЕВ

Оставить комментарий