从jinja2中的父块获取内容

时间:2015-06-27 21:10:08

标签: python flask jinja2

我需要通过控制台脚本从Jinja2中的特定块获取内容。例如

//global template
{% block target %}
    <some_content_from_top>
{% endblock %}

//parent template
{% extends 'top.html' %}
{% block target %}
    <some_content_from_parent>
{% endblock %}

//child template
{% extends 'parent.html' %}
{% block target %}
    <some_content>
{% endblock %}

我可以使用类似的东西从特定模板中获取此块中的内容而不使用继承者

template_source = self.env.loader.get_source(self.env, template_path)[0]
parsed_content = self.env.parse(template_source).body
# do something with blck content

但是如何从所有父模板中获取内容。当然我可以从Extends块获取父模板名称并一遍又一遍地执行相同的操作。我得到顶级模板而没有Extends块。但也许有更有效的方法?

1 个答案:

答案 0 :(得分:4)

您可以使用Jinja2's super function在父模板中包含块中的内容。

top.html

{% block target %}
  <some_content_from_top>
{% endblock %}

parent.html

{% extends 'top.html' %}
{% block target %}
  <some_content_from_parent>
  {{ super() }}
{% endblock %}

child.html

{% extends 'parent.html' %}
{% block target %}
  {{ super() }}
  <some_content>
{% endblock %}

这将导致:

<some_content_from_parent>
<some_content_from_top>
<some_content>