如何在Jinja2中仅渲染特定的块,尤其是来自父模板的块?

时间:2019-04-15 19:05:19

标签: python jinja2

我只想渲染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块,而subjectbody保持不变。

不幸的是,如果您加载该模板并尝试找到subjectbody块,那么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))

有什么建议吗?

0 个答案:

没有答案