Python 将包含文件中的块用于jinja2中的父级

Python 将包含文件中的块用于jinja2中的父级,python,jinja2,Python,Jinja2,我不确定我想做的是否可行:我试图让父模板中的一个块由父模板的子模板中包含的文件填充 解释这一点的最佳方法是测试用例: 文件t1.djhtml: <root> <block t3_container> {% block t3 %}This should be 'CONTENT'{% endblock %} </block t3_container> <block t2_container> {% bl

我不确定我想做的是否可行:我试图让父模板中的一个块由父模板的子模板中包含的文件填充

解释这一点的最佳方法是测试用例:

文件t1.djhtml

<root>
    <block t3_container>
        {% block t3 %}This should be 'CONTENT'{% endblock %}
    </block t3_container>

    <block t2_container>
    {% block t2 %}{% endblock %}
    </block t2_container>
</root>
{% extends 't1.djhtml' %}

{% block t2 %}
        <block t2>
            {%- include 't3.djhtml' with context %}
        </block t2>
{% endblock %}
{% block t3 %}
        <block t3>
            CONTENT
        </block t3>
{% endblock %}
from jinja2 import Environment, FileSystemLoader
env  = Environment(loader=FileSystemLoader(''))
t=env.get_template('t2.djhtml')
print t.render()
输出为:

<root>
    <block t3_container>
        This should be 'CONTENT'
    </block t3_container>

    <block t2_container>

        <block t2>
        <block t3>
            CONTENT
        </block t3>

        </block t2>

    </block t2_container>
</root>

这应该是“内容”
内容

t2
块应为空,
t3\u容器
中应包含块
t3
的内容。如何实现这一点?

您可以在包含的文件中使用宏,但不是包含它,而是使用上下文导入宏


T1.html


{%block t3%}{%endblock%}
{%block t2%}{%endblock%}
T2.html

{%extends'T1.html%}
{%-从'T3.html'导入内部,使用上下文%的inner2}
{%block t3%}
{{inner2()}}
{%endblock%}
{%block t2%}
{{inner()}}
{%endblock%}
T3.html

{%macro inner2()%}
内容“{foo+1}”
{%endmacro%}
{%宏内部()%}
你好
{%endmacro%}
test.py

来自jinja2导入环境的FileSystemLoader env=Environment(loader=FileSystemLoader(“.”) t=env.get_模板(“T2.html”) 打印(t.render({“foo”:122}))
感谢您回来并添加您的解决方案@Richard!这个解决方案非常有效,救了我一个晚上