Зарегистрируйтесь, чтобы продолжить обучение

Шаблонизация Ключевые аспекты веб-разработки на 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 во фреймворках используют специальные библиотеки — шаблонизаторы. Принцип их работы такой:

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


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

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

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

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

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

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

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

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
Программирование на Python, Разработка веб-приложений и сервисов используя Django, проектирование и реализация REST API
10 месяцев
с нуля
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

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

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»