Атрибут env
Атрибут env применяется к экземпляру класса Jinja2Templates
и предоставляет доступ к объекту окружения Jinja2.
Через этот атрибут можно настраивать загрузчики шаблонов,
добавлять глобальные переменные, регистрировать фильтры и тесты,
а также изменять другие параметры окружения.
Атрибут создаётся автоматически при инициализации класса
на основе переданной директории с шаблонами.
Синтаксис
templates = Jinja2Templates(directory='templates')
templates.env
Пример
Давайте создадим экземпляр класса Jinja2Templates
и выведем тип объекта окружения:
from fastapi import FastAPI
from fastapi.templating import Jinja2Templates
app = FastAPI()
templates = Jinja2Templates(directory='templates')
@app.get('/')
def index():
res = type(templates.env).__name__
return {'env_type': res}
Результат выполнения кода:
{"env_type": "Environment"}
Пример
Давайте добавим глобальную переменную через атрибут env,
чтобы она была доступна во всех шаблонах:
from fastapi import FastAPI
from fastapi.templating import Jinja2Templates
app = FastAPI()
templates = Jinja2Templates(directory='templates')
templates.env.globals['site_name'] = 'abcde'
@app.get('/')
def index():
return {'site': templates.env.globals['site_name']}
Результат выполнения кода:
{"site": "abcde"}
Пример
Давайте зарегистрируем собственный фильтр через атрибут env
и применим его в шаблоне:
from fastapi import FastAPI, Request
from fastapi.templating import Jinja2Templates
app = FastAPI()
templates = Jinja2Templates(directory='templates')
def double(value):
return value * 2
templates.env.filters['double'] = double
@app.get('/')
def index(request: Request):
return templates.TemplateResponse(
request=request,
name='index.html',
context={'name': 'user'}
)
Содержимое файла templates/index.html:
<p>{{ name | double }}</p>
Результат выполнения кода:
<p>useruser</p>
Смотрите также
-
класс
Jinja2Templates,
который управляет шаблонами Jinja2 -
метод
TemplateResponse,
который возвращает ответ на основе шаблона -
метод
get_template,
который загружает шаблон по имени -
параметр
name,
который задаёт имя шаблона