我不确定我想做什么是可能的:我正在尝试在父模板中获取一个块,以便由父模板的子模板中包含的文件填充.
解释这个的最好方法是测试用例:
文件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>
Run Code Online (Sandbox Code Playgroud)
文件t2.djhtml:
{% extends 't1.djhtml' %}
{% block t2 %}
<block t2>
{%- include 't3.djhtml' with context %}
</block t2>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
文件t3.djhtml:
{% block t3 %}
<block t3>
CONTENT
</block t3>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
文件test.py:
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader(''))
t=env.get_template('t2.djhtml')
print t.render()
Run Code Online (Sandbox Code Playgroud)
输出是:
<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>
Run Code Online (Sandbox Code Playgroud)
该t2块应为空,并且内部t3_container应该有块t3的内容.我该如何做到这一点?
您可以在包含的文件中使用宏,但不是包含它,而是导入带有上下文的宏。
t1.html
<root>
<block t3_container>
{% block t3 %}{% endblock %}
</block t3_container>
<block t2_container>
{% block t2 %}{% endblock %}
</block t2_container>
</root>
Run Code Online (Sandbox Code Playgroud)
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 %}
Run Code Online (Sandbox Code Playgroud)
t3.html
{% macro inner2() %}
<block t3>
CONTENT '{{ foo+1 }}'
</block t3>
{% endmacro %}
{% macro inner() %}
hello
{% endmacro %}
Run Code Online (Sandbox Code Playgroud)
测试文件
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader("."))
t = env.get_template("T2.html")
print(t.render({"foo": 122}))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4224 次 |
| 最近记录: |