Python шаблонизатор Jinja. Часть 2
В одной из предыдущих статей про Jinja мы рассмотрели, как при помощи языка шаблонов можно динамически изменять строки. В сегодняшней статье мы рассмотрим данный фреймворк более подробно.
И так, с помощью шаблонизатора можно формировать документы в зависимости от введенных данных. Тоже можно сделать и с помощью форматирования строки в Python. Но при всем своем сходстве, Jinja все же является отдельным фреймворком, имея более широкий набор возможностей. И давайте посмотрим на них.
Экранирование данных
Бывает что в html документе вместо тегов нужно вывести их html-сущности такие как < или >. В подобных случаях используется метод 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))
# вывод
<a>Myrusakov</a>
Цикл 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.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.