2015-04-05 109 views
1

我想在jinja2中使用繼承的概念將配置的不同部分分隔成多個獨立的子模板。渲染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加載程序:

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

我得到了想要的結果周圍使用包括的其他方式。

渲染父模板其中包括所有兒童模板

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 
0

您可以使用的子模板頂部延伸

{% extends "child1.jj2l" %} 
+0

#Garesh-shyara,這是不產生預期結果的初始條件。 – AJN 2015-04-07 23:31:46