API рендеринга шаблонов Flask

Flask использует движок Jinja2 для рендеринга шаблонов, встраивая данные Python в HTML-страницы.

Файлы шаблонов по умолчанию размещаются в корневом каталоге проектаtemplates/в папке.


render_template

Наиболее часто используемая функция рендеринга шаблонов: загружает шаблон из файла и рендерит его.

Параметр Type Описание
template_name_or_list str / list Имя файла шаблона (относительно папки templates) или список имён шаблонов (возвращается первый существующий).
**context Именованные аргументы Переменные, передаваемые в шаблон, например title="Hello", user=user_obj

Все функции рендеринга

Функция Описание
render_template(template_name_or_list, **context) Рендерит шаблон из файла, возвращает HTML-строку.
render_template_string(source, **context) Рендерит шаблон из строки, подходит для встроенных шаблонов.
stream_template(template_name_or_list, **context) Выполняет потоковую отрисовку шаблона, возвращает генератор. Подходит для больших страниц.
stream_template_string(source, **context) Потоковая отрисовка строковых шаблонов
get_template_attribute(template_name, attribute) Получает макрос или переменную из шаблона. Позволяет вызывать макросы Jinja2 из Python.

Встроенные объекты в шаблонах

Следующие объекты доступны в шаблонах без явной передачи:

Object Описание
request Текущий объект запроса
session Текущий объект сессии
g Глобальный объект уровня запроса
config Словарь конфигурации приложения
url_for Функция генерации URL
get_flashed_messages Функция получения сообщений Flask

Примеры кода

Пример

from flask import Flask, render_template, render_template_string

app = Flask(__name__)

@app.route("/")
def index():
    return render_template("index.html",
                          title=ПРИМЕР Главная,
                          posts=[{"id": 1, "title": Статья A},
                                 {"id": 2, "title": Статья B}])

@app.route("/inline")
def inline_template():
    # Рендеринг из строки (содержимое шаблона написано непосредственно в коде)
    return render_template_string("""
        <h1>Привет, {{ name }}!</h1>
        <p>Добро пожаловать в EXAMPLE.</p>
    """
, name="World")

@app.route("/stream")
def stream_large_page():
    # Потоковый рендеринг больших страниц, генерация и отправка на лету
    return stream_template("large_report.html",
                          items=get_10k_items())
Другие расширения