Класс Jinja2Templates
Класс Jinja2Templates применяется для рендеринга HTML-шаблонов
через шаблонизатор Jinja2. Первым параметром передаётся директория
с шаблонами, например 'templates'. Экземпляр класса хранит
настройки окружения Jinja2 и умеет отдавать готовые страницы
через метод TemplateResponse.
Обычно объект templates создают один раз на уровне модуля,
а затем используют в обработчиках маршрутов. В шаблон передаётся
словарь контекста, значения которого подставляются в HTML.
Синтаксис
from fastapi.templating import Jinja2Templates
templates = Jinja2Templates(directory='templates')
Пример
Давайте создадим шаблон и вернём его из обработчика:
<!DOCTYPE html>
<html>
<head>
<title>Main page</title>
</head>
<body>
<h1>{{ title }}</h1>
<p>{{ text }}</p>
</body>
</html>
Теперь подключим шаблонизатор к приложению:
from fastapi import FastAPI, Request
from fastapi.templating import Jinja2Templates
app = FastAPI()
templates = Jinja2Templates(directory='templates')
@app.get('/')
def index(request: Request):
context = {
'title': 'hello',
'text': 'article'
}
return templates.TemplateResponse(
request=request,
name='index.html',
context=context
)
Результат выполнения кода для адреса /:
<!DOCTYPE html>
<html>
<head>
<title>Main page</title>
</head>
<body>
<h1>hello</h1>
<p>article</p>
</body>
</html>
Пример
Давайте передадим в шаблон список и выведем его циклом:
<!DOCTYPE html>
<html>
<head>
<title>Users</title>
</head>
<body>
<ul>
{% for user in users %}
<li>{{ user }}</li>
{% endfor %}
</ul>
</body>
</html>
Теперь вернём этот шаблон из обработчика:
from fastapi import FastAPI, Request
from fastapi.templating import Jinja2Templates
app = FastAPI()
templates = Jinja2Templates(directory='templates')
@app.get('/users')
def users(request: Request):
context = {
'users': ['abcde', 'article', 'user']
}
return templates.TemplateResponse(
request=request,
name='users.html',
context=context
)
Результат выполнения кода для адреса /users:
<!DOCTYPE html>
<html>
<head>
<title>Users</title>
</head>
<body>
<ul>
<li>abcde</li>
<li>article</li>
<li>user</li>
</ul>
</body>
</html>
Смотрите также
-
класс
Jinja2Templates,
который подключает шаблонизатор Jinja2 к приложению -
метод
TemplateResponse,
который возвращает HTML-страницу из шаблона -
метод
get_template,
который возвращает объект шаблона по имени -
атрибут
env,
который хранит окружение Jinja2