gpt4 book ai didi

python - Jinja2 for Flask 未拾取子模板

转载 作者:行者123 更新时间:2023-11-30 23:13:51 26 4
gpt4 key购买 nike

我正在尝试编写一个包含三个部分的电子邮件 html 文件:页眉、正文和页脚。它们包含在主 mail.html 文件中,如下所示:

<html>
<body>
<p>
<table border="0" cellpadding="0" cellspacing="0" style="font-size: 12.727272033691406px; line-height: 1.2em; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; border-spacing: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; background-color: rgb(231, 232, 232); border-top-style: solid; border-top-color: rgb(221, 221, 221);" width="100%">
<tbody>
<tr>
<td align="center" style="font-family: arial, sans-serif; margin: 0px;" width="100%">

{% block head %}
{% endblock %}

{% block body %}
{% endblock %}
<br/>

{% block footer %}
{% endblock %}
</td>
</tr>
</tbody>
</table>
</p>
</body>
</html>

本质上是一个父模板和三个子模板,全部位于同一目录中。子模板已在以下两个标记之间进行了描述:

{% extends "mail.html" %}
{% block head %}
...
{% endblock %}

当我运行以下命令时:

from jinja2 import Environment, PackageLoader

env = Environment(loader = PackageLoader('mailwrapper','mail_templates'))


template = env.get_template('mail.html')
template.render()

我只得到 mail.html 的 html 输出,但子 block 被忽略,只打印空行。我在这里做错了什么?

最佳答案

要将内容放入 headbodyfooter block 中,您应该渲染 head.html 模板或 body.htmlfooter.html。当您执行 head.html 模板时,它会采用 mail.html 模板并用内容替换 block 。另一方面,当您渲染 mail.html 模板时,该模板不知道 head.html (或其他)模板应该用内容替换 block 。

考虑以下示例。

ma​​il.html

<html>
<body>
{% block head %}
{% endblock %}
</body>
</html>

head.html:

{% extends "mail.html" %}
{% block head %}
Hello Email Head
{% endblock %}

ma​​ilwrapper.py:

from jinja2 import Environment, PackageLoader
env = Environment(loader = PackageLoader('mailwrapper','mail_templates'))

template = env.get_template('head.html')
print(template.render())

>>> <html>
>>> <body>
>>> Hello Email Head
>>> </body>
>>> </html>

template = env.get_template('mail.html')
print(template.render())

>>> <html>
>>> <body>
>>>
>>> </body>
>>> </html>

我建议使用 1 个主要 ma​​il.html 模板,其中包含 3 个 block 和一堆扩展 ma​​il.html 模板的其他模板,替换所有 3 个 block 中的内容。例如

Friendly_mail.html:

{% extends "mail.html" %}
{% block head %}
Dear ...,
{% endblock %}

{% block body %}
You have a good day.
{% endblock %}

{% block footer %}
Sincerely,
...
{% endblock %}

关于python - Jinja2 for Flask 未拾取子模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29095300/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com