Skip to content

Templating - Jinja2Templates

You can use the Jinja2Templates class to render Jinja templates.

Read more about it in the FastAPI docs for Templates.

You can import it directly from fastapi.templating:

fromfastapi.templatingimport Jinja2Templates

fastapi.templating.Jinja2Templates

Jinja2Templates(
 directory: (
 str | PathLike[str] | Sequence[str | PathLike[str]]
 ),
 *,
 context_processors: (
 list [Callable[[Request ], dict [str, Any]]] | None
 ) = None
)
Jinja2Templates(
 *,
 env: Environment,
 context_processors: (
 list [Callable[[Request ], dict [str, Any]]] | None
 ) = None
)
Jinja2Templates(
 directory=None, *, context_processors=None, env=None
)

Jinja2 template renderer.

Example
fromstarlette.templatingimport Jinja2Templates
templates = Jinja2Templates(directory="templates")
async defhomepage(request: Request) -> Response:
 return templates.TemplateResponse(request, "index.html")
Source code in starlette/templating.py
def__init__(
 self,
 directory: str | PathLike[str] | Sequence[str | PathLike[str]] | None = None,
 *,
 context_processors: list[Callable[[Request], dict[str, Any]]] | None = None,
 env: jinja2.Environment | None = None,
) -> None:
 assert bool(directory) ^ bool(env), "either 'directory' or 'env' arguments must be passed"
 self.context_processors = context_processors or []
 if directory is not None:
 loader = jinja2.FileSystemLoader(directory)
 self.env = jinja2.Environment(loader=loader, autoescape=jinja2.select_autoescape())
 elif env is not None: # pragma: no branch
 self.env = env

 self._setup_env_defaults(self.env)

context_processors instance-attribute

context_processors = context_processors or []

env instance-attribute

env = Environment(
 loader=loader, autoescape=select_autoescape()
)

get_template

get_template(name)
Source code in starlette/templating.py
defget_template(self, name: str) -> jinja2.Template:
 return self.env.get_template(name)

TemplateResponse

TemplateResponse(
 request,
 name,
 context=None,
 status_code=200,
 headers=None,
 media_type=None,
 background=None,
)

Render a template and return an HTML response.

PARAMETER DESCRIPTION
request

The incoming request instance.

TYPE: Request

name

The template file name to render.

TYPE: str

context

Variables to pass to the template.

TYPE: dict[str, Any] | None DEFAULT: None

status_code

HTTP status code for the response.

TYPE: int DEFAULT: 200

headers

Additional headers to include in the response.

TYPE: Mapping[str, str] | None DEFAULT: None

media_type

Media type for the response.

TYPE: str | None DEFAULT: None

background

Background task to run after response is sent.

TYPE: BackgroundTask | None DEFAULT: None

RETURNS DESCRIPTION
_TemplateResponse

An HTML response with the rendered template content.

Source code in starlette/templating.py
defTemplateResponse(
 self,
 request: Request,
 name: str,
 context: dict[str, Any] | None = None,
 status_code: int = 200,
 headers: Mapping[str, str] | None = None,
 media_type: str | None = None,
 background: BackgroundTask | None = None,
) -> _TemplateResponse:
"""
 Render a template and return an HTML response.

 Args:
 request: The incoming request instance.
 name: The template file name to render.
 context: Variables to pass to the template.
 status_code: HTTP status code for the response.
 headers: Additional headers to include in the response.
 media_type: Media type for the response.
 background: Background task to run after response is sent.

 Returns:
 An HTML response with the rendered template content.
 """
 context = context or {}

 context.setdefault("request", request)
 for context_processor in self.context_processors:
 context.update(context_processor(request))

 template = self.get_template(name)
 return _TemplateResponse(
 template,
 context,
 status_code=status_code,
 headers=headers,
 media_type=media_type,
 background=background,
 )

AltStyle によって変換されたページ (->オリジナル) /