Python 从Jinja2中的超级块访问变量

Python 从Jinja2中的超级块访问变量,python,html,inheritance,scope,jinja2,Python,Html,Inheritance,Scope,Jinja2,我一直在尝试设计一个包含多个部分的报告文档,其中包含一个主要模板: <html> <body> {% include "SectionA.html" %} {% include "SectionB.html" %} ... </body> </html> 然后在每个扩展名文件中覆盖该节: {% block setVariables %} {% set doFoo = sectionFoo %} {% set doB

我一直在尝试设计一个包含多个部分的报告文档,其中包含一个主要模板:

<html>
  <body>
    {% include "SectionA.html" %}
    {% include "SectionB.html" %}
    ...
  </body>
</html>
然后在每个扩展名文件中覆盖该节:

{% block setVariables %}
{% set doFoo = sectionFoo %}
{% set doBar = sectionBar %}
{% set bazValues = sectionBaz %}
{% endblock setVariables %}
问题是,
doFoo
被设置在两个完全不同的作用域中,我还没有找到一种方法来访问其中一个。我不确定使用我当前的策略是否有解决方法,但我希望能够帮助创建此模块化、多节报告。

您可以使用标记在当前名称空间中呈现
base.html
的内容

因此
base.html
应该只为公共变量设置默认值:

{% set doFoo = False %}
{% set doBar = False %}
{% set bazValues = [] %}
然后在每个单独的HTML文件中:

{% include 'base.html' %}

这是一个相当不错的解决方案,不过如果能够用
extend
覆盖块就好了。有什么想法吗?或者我在基本文件中创建了一些复杂的控制流?您可以将变量存储在单独的模板文件中,例如
变量。jinja2
,专门用于设置变量以与
include
标记一起使用,离开
base.html
时,重点是用
block
标记定义基本html模板。然后,每个单独的HTML文件将包含
变量.jinja2
和扩展
base.HTML
{% include 'base.html' %}