我正在尝试编写一个包含三个部分的电子邮件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>
基本上是一个包含三个子temnplates的父模板,它们都在同一目录中。已在以下两个标记之间描述了子模板:
{% 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获取输出,但忽略子块,而只打印出空行。我在这里做错了什么?
答案 0 :(得分:3)
要将内容导入 head ,正文或页脚块,您应该呈现 head.html 模板或 body.html 或 footer.html 。当您执行 head.html 模板时,它会使用 mail.html 模板并用内容替换这些块。另一方面,当您呈现 mail.html 模板时,模板不知道应该替换块的 head.html (或其他)模板内容。
请考虑以下示例。
<强> mail.html 强>
<html>
<body>
{% block head %}
{% endblock %}
</body>
</html>
<强> head.html:强>
{% extends "mail.html" %}
{% block head %}
Hello Email Head
{% endblock %}
<强> mailwrapper.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个主要 mail.html 模板,其中包含3个块和一些扩展 mail.html 模板的其他模板,替换所有3个块中的内容。例如
<强> friendly_mail.html:强>
{% extends "mail.html" %}
{% block head %}
Dear ...,
{% endblock %}
{% block body %}
You have a good day.
{% endblock %}
{% block footer %}
Sincerely,
...
{% endblock %}