jinja2 TemplateResponse.template.render() 不会将上下文注入模板
jinja2 TemplateResponse.template.render() doesn't inject context into template
我在 Jinja2 中使用 FastAPI。
我有一个发送电子邮件的功能。电子邮件的内容在需要呈现的 HTML 中。
async def send_confirmation_email(
self, email: str, confirm_url: str, request: Request
):
html = templates.TemplateResponse(
"email_template.html",
{
"request": request,
"header": "Thanks for joining",
"url": confirm_url,
"link_title": "ACTIVATE YOUR ACCOUNT",
},
)
await self.send_email(
html.template.render(),
"Confirm Your Email",
setting.EMAIL_SUPPORT,
email,
)
html.template.render()
仅呈现 HTML 的内容,而没有将上下文填充到占位符中。例如"header": "Thanks for joining"
仍然是空的。
来自 HTML 的片段:
<td align="center" width="120" colspan="3" valign="top"><h2>{{ header }}</h2></td>
请问我错过了什么?
TemplateResponse
return 一个 starlette.responses.Response
,不是渲染器模板。
为此,您需要使用
templates.get_template("email_template.html").render({
"request": request,
"header": "Thanks for joining",
"url": confirm_url,
"link_title": "ACTIVATE YOUR ACCOUNT",
})
(参考:https://github.com/encode/starlette/blob/master/starlette/templating.py#L72)
我在 Jinja2 中使用 FastAPI。
我有一个发送电子邮件的功能。电子邮件的内容在需要呈现的 HTML 中。
async def send_confirmation_email(
self, email: str, confirm_url: str, request: Request
):
html = templates.TemplateResponse(
"email_template.html",
{
"request": request,
"header": "Thanks for joining",
"url": confirm_url,
"link_title": "ACTIVATE YOUR ACCOUNT",
},
)
await self.send_email(
html.template.render(),
"Confirm Your Email",
setting.EMAIL_SUPPORT,
email,
)
html.template.render()
仅呈现 HTML 的内容,而没有将上下文填充到占位符中。例如"header": "Thanks for joining"
仍然是空的。
来自 HTML 的片段:
<td align="center" width="120" colspan="3" valign="top"><h2>{{ header }}</h2></td>
请问我错过了什么?
TemplateResponse
return 一个 starlette.responses.Response
,不是渲染器模板。
为此,您需要使用
templates.get_template("email_template.html").render({
"request": request,
"header": "Thanks for joining",
"url": confirm_url,
"link_title": "ACTIVATE YOUR ACCOUNT",
})
(参考:https://github.com/encode/starlette/blob/master/starlette/templating.py#L72)