我只想渲染Jinja2模板的特定块。例如,假设我使用Jinja2处理电子邮件,并且有一个名为 subject 的块和一个名为 body 的块,分别表示电子邮件的那些部分。< / p>
我可能有一个 base 模板(base.html
),如下所示:
{% block subject %}Message Form Us{% endblock %}
{% block body %}
{% block content %}INSERT CONTENT HERE{% endblock %}
----
Thanks for reaching out.
{% endblock %}
然后我可能有一个welcome.html
模板:
{% extends 'base.html' %}
{% block content %}
Hello and welcome.
{% endblock %}
请注意,welcome.html
扩展了base.html
,并且仅修改了嵌套的content
块,而subject
和body
保持不变。
不幸的是,如果您加载该模板并尝试找到subject
或body
块,那么Jinja2 API中将不可见这些块:
env = jinja2.Environment(
loader=jinja2.PackageLoader('my_package'))
template = env.get_template('welcome.html')
print(template.blocks) # Only has a key for 'content`, no 'body' or 'subject'
我想 要做的是这样,但这会导致KeyError:
my_email_template = env.get_template('welcome.html')
context = template.new_context(vars)
subject = jinja2.utils.concat(template.blocks['subject'](context))
body = jinja2.utils.concat(template.blocks['body'](context))
有什么建议吗?