Метод TemplateResponse
Метод TemplateResponse применяется к объекту
Jinja2Templates и формирует ответ на основе
HTML-шаблона. Первым параметром передаётся объект
Request, вторым - имя шаблона, третьим -
словарь контекста с данными для подстановки в шаблон.
Также можно передать параметры status_code,
headers и media_type.
Возвращается объект _TemplateResponse,
который FastAPI отдаёт как HTML-страницу.
Синтаксис
templates.TemplateResponse(
request,
name,
context,
status_code=200,
headers=None,
media_type=None
)
Пример
Давайте создадим шаблон и отдадим его по адресу '/'.
Сначала файл шаблона:
<!DOCTYPE html>
<html>
<head>
<title>Index</title>
</head>
<body>
<p>{{ text }}</p>
</body>
</html>
Теперь приложение FastAPI:
from fastapi import FastAPI, Request
from fastapi.templating import Jinja2Templates
app = FastAPI()
templates = Jinja2Templates(directory='templates')
@app.get('/')
def index(request: Request):
return templates.TemplateResponse(
request,
'index.html',
{'text': 'hello'}
)
Результат выполнения кода:
<!DOCTYPE html>
<html>
<head>
<title>Index</title>
</head>
<body>
<p>hello</p>
</body>
</html>
Пример
Давайте передадим в шаблон список и выведем его элементы:
<!DOCTYPE html>
<html>
<head>
<title>Items</title>
</head>
<body>
<ul>
{% for item in items %}
<li>{{ item }}</li>
{% endfor %}
</ul>
</body>
</html>
Теперь обработчик маршрута:
from fastapi import FastAPI, Request
from fastapi.templating import Jinja2Templates
app = FastAPI()
templates = Jinja2Templates(directory='templates')
@app.get('/items')
def items(request: Request):
return templates.TemplateResponse(
request,
'items.html',
{'items': ['a', 'b', 'c', 'd', 'e']}
)
Результат выполнения кода:
<!DOCTYPE html>
<html>
<head>
<title>Items</title>
</head>
<body>
<ul>
<li>a</li>
<li>b</li>
<li>c</li>
<li>d</li>
<li>e</li>
</ul>
</body>
</html>
Пример
Давайте укажем собственный код статуса 404
для страницы ошибки:
from fastapi import FastAPI, Request
from fastapi.templating import Jinja2Templates
app = FastAPI()
templates = Jinja2Templates(directory='templates')
@app.get('/user')
def user(request: Request):
return templates.TemplateResponse(
request,
'index.html',
{'text': 'page found'},
status_code=404
)
Результат выполнения кода:
<!DOCTYPE html>
<html>
<head>
<title>Index</title>
</head>
<body>
<p>page found</p>
</body>
</html>
Смотрите также
-
класс
Jinja2Templates,
который управляет шаблонами Jinja2 в FastAPI -
метод
get_template,
который возвращает объект шаблона по имени -
параметр
context,
который передаёт данные в шаблон -
параметр
status_code,
который задаёт HTTP-статус ответа