【问题标题】:get content from parent block in jinja2从 jinja2 中的父块获取内容
【发布时间】:2015-09-14 14:39:14
【问题描述】:

我需要通过控制台脚本从 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 块的顶级模板。但也许有更有效的方法?

【问题讨论】:

    标签: python flask jinja2


    【解决方案1】:

    您可以使用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>
    

    【讨论】:

    • 我很抱歉在我的问题中错过了一些重要的员工。更新问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 2019-08-27
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    相关资源
    最近更新 更多