首页 文章

从jinja2中的父块获取内容

提问于
浏览
2

我需要通过控制台脚本从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 回答

  • 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>
    

相关问题