我想在jinja2中使用继承的概念将配置的不同部分分成多个独立的子模板。
最终,让它适用于更复杂的层次结构,例如:
parent.jj2
|_child1.jj2
| |_child11.jj2
| |
| |_child12.jj2
|
|_child2.jj2
|_child21.jj2
|
|_child22.jj2
在这个例子中,我只使用了2个子模板:
parent.jj2模板:
## Main file header
{% block child1 %}{% endblock %}
##
{% block child2 %}{% endblock %}
## Main file tail
child1.jj2模板:
{% extends "parent.jj2" %}
{% block child1 %}
{% for i in list %}
child1 line {{ i }}
{% endfor %}
{% endblock %}
child2.jj2模板:
{% extends "parent.jj2" %}
{% block child2 %}
{% for i in list %}
child2 line {{ i }}
{% endfor %}
{% endblock %}
我使用以下渲染,其中子模板是单独渲染的,但它不会产生所需的结果:
使用过的jinja2 Loader:
list1 = \
[1,2,3]
list2 = \
['a','b','c']
loader = jinja2.FileSystemLoader(os.getcwd())
jenv = jinja2.Environment(loader=loader, trim_blocks=True,lstrip_blocks=True)
template = jenv.get_template('child1.jj2')
print template.render(list=list1)
template = jenv.get_template('child2.jj2')
print template.render(list=list2)
如何以一种方式调用渲染,即我将主模板与子块一起渲染到一个文件中?
期望的结果:
## Main file header
child line1 1
child line1 2
child line1 3
##
child line1 a
child line1 b
child line1 c
## Main file tail
当前结果:
## Main file header
child line1 1
child line1 2
child line1 3
##
## Main file tail
## Main file header
##
child line1 a
child line1 b
child line1 c
## Main file tail
答案 0 :(得分:0)
我使用 include 来获得所需的结果。
渲染父模板,其中包含所有子模板
<强> parent.jj2:强>
#Main file header
{% include "child1.jj2" %}
##
{% include "child2.jj2" %}
#Main file tail
<强> child1.jj2 强>
{% block peceinterfaces %}
{% for i in list[0] %}
child1 line1 {{ i }}
{% endfor %}
{% endblock %}
<强> child2.jj2:强>
{% block pepinterfaces %}
{% for i in list[1] %}
child2 line1 {{ i }}
{% endfor %}
{% endblock %}
渲染父模板:
list1 = \
[1,2,3]
list2 = \
['a','b','c']
loader = jinja2.FileSystemLoader(os.getcwd())
jenv = jinja2.Environment(loader=loader, trim_blocks=True,lstrip_blocks=True)
template = jenv.get_template('parent.jj2')
print template.render(list=[list1,list2])
结果:
#Main file header
child1 line1 1
child1 line1 2
child1 line1 3
##
child2 line1 a
child2 line1 b
child2 line1 c
#Main file tail
答案 1 :(得分:0)
您可以在子模板的顶部使用扩展
{% extends "child1.jj2l" %}