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())
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())