gpt4 book ai didi

python - 在 jinja2 中为父级使用包含文件中的 block

转载 作者:太空宇宙 更新时间:2023-11-04 06:34:34 24 4
gpt4 key购买 nike

我不确定我想做的事情是否可行:我正在尝试让父模板中的一个 block 由包含在父模板中的文件填充。

最好的解释方法是测试用例:

文件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>

文件t2.djhtml:

{% extends 't1.djhtml' %}

{% block t2 %}
<block t2>
{%- include 't3.djhtml' with context %}
</block t2>
{% endblock %}

文件t3.djhtml:

{% block t3 %}
<block t3>
CONTENT
</block t3>
{% endblock %}

文件test.py:

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 block 应该是空的,t3_container 应该包含 block t3 的内容。我该如何实现?

最佳答案

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


T1.html

<root>
<block t3_container>
{% block t3 %}{% endblock %}
</block t3_container>

<block t2_container>
{% block t2 %}{% endblock %}
</block t2_container>
</root>

T2.html

{% extends 'T1.html' %}
{%- from 'T3.html' import inner, inner2 with context %}

{% block t3 %}
{{ inner2() }}
{% endblock %}

{% block t2 %}
<block t2>
{{ inner() }}
</block t2>
{% endblock %}

T3.html

{% macro inner2() %}
<block t3>
CONTENT '{{ foo+1 }}'
</block t3>
{% endmacro %}

{% macro inner() %}
hello
{% endmacro %}

测试.py

from jinja2 import Environment, FileSystemLoader

env = Environment(loader=FileSystemLoader("."))
t = env.get_template("T2.html")

print(t.render({"foo": 122}))

关于python - 在 jinja2 中为父级使用包含文件中的 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13050009/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com