Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Шаблонизация Ключевые аспекты веб-разработки на Python

@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 и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Для полного доступа к курсу нужна профессиональная подписка

Профессиональная подписка откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
900
упражнения
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 120 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
22 сентября 8 месяцев

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»