Templating - Jinja2Templates¶
AI coding agents
Use the official FastAPI skill for your installed version. Install it from your project directory:
uvx library-skills
See Develop with AI.
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:
from fastapi.templating import Jinja2Templates
fastapi.templating.Jinja2Templates
¶
Jinja2Templates(
directory=None, *, context_processors=None, env=None
)
Jinja2 template renderer.
Example
from starlette.templating import Jinja2Templates
templates = Jinja2Templates(directory="templates")
async def homepage(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)
get_template
¶
get_template(name)
Source code in starlette/templating.py
def get_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:
|
name
|
The template file name to render.
TYPE:
|
context
|
Variables to pass to the template.
TYPE:
|
status_code
|
HTTP status code for the response.
TYPE:
|
headers
|
Additional headers to include in the response.
TYPE:
|
media_type
|
Media type for the response.
TYPE:
|
background
|
Background task to run after response is sent.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
_TemplateResponse
|
An HTML response with the rendered template content. |
Source code in starlette/templating.py
def TemplateResponse(
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,
)