@app.route('/')
def root():
return 'Main page'
В примере выше обработчик на запрос главной страницы отдаст строчку 'Main Page'
. Такой пример хорошо подходит для демонстрации, но обычно браузер ожидает HTML-страницу. Причём страница может быть достаточно большой — десятки и сотни килобайтов. Если мы попробуем создавать HTML так:
@app.route('/')
def root():
title = 'My super site'
return f'<html><body><h1>{title}</h1></body></html>'
то код достаточно быстро превратится в нечто нечитаемое. Для работы с HTML во фреймворках используют специальные библиотеки, называемые шаблонизаторами (templating engines). Принцип работы шаблонизатора заключается в том, что в отдельном файле описывается шаблон, который во время работы программы загружается и превращается в HTML. При этом шаблон может содержать как обычные HTML-тэги, так и специальную разметку, позволяющую подставлять в HTML значения, отображать и прятать отдельные фрагменты по условию, "размножать" фрагменты в цикле, и тому подобное. Вот пример шаблона для популярного шаблонизатора Jinja:
{% extends "email-html_base.tmpl" %}
{% block content %}
<p>
{{ msg }}
</p>
<p>
<b>AFFECTED INSTANCES:</b>
</p>
<table class='noborder'>
<tr>
<th>UUID</th><th>IP Address</th><th>Host</th>
</tr>
{% for instance in instances -%}
<tr>
<td>{{ instance.id }}</td>
<td>{{ instance.access_ip_v4 }}</td>
<td>{{ instance.name }}</td>
</tr>
{% endfor %}
</table>
{% endblock %}
При чтении такого шаблона библиотека подставляет переменные и выполняет код логики каждый раз. Это позволяет использовать один и тот же шаблон для выдачи разных страниц, отличающихся только частью содержимого (чаще всего — подставляемыми переменными).
Стоит отметить, что многие шаблонизаторы можно использовать для формирования произвольных текстов, а не только HTML.
Об этом редко говорят во время обучения, но безопасность крайне важна при работе с HTML формами и шаблонами в целом. Не понимая основ защиты, вы гарантировано сделаете ошибку, которая может привести к фатальным последствиям для проекта. Например, отсутствие экранирования пользовательских данных приведёт к тому, что появится возможность провести XSS-атаку.
Добавьте к web-приложению, которое вы реализовали на прошлом уроке, вывод HTML. В этом вам поможет глава "Rendering Templates" всё того же руководства.
Вам ответят команда поддержки Хекслета или другие студенты.
Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.
Загляните в раздел «Обсуждение»:
Статья «Ловушки обучения»
Вебинар «Как самостоятельно учиться»
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.
Наши выпускники работают в компаниях:
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Зарегистрируйтесь или войдите в свой аккаунт