2015-06-27 45 views
2

我需要通過控制檯腳本來得到特定塊內容的Jinja2。例如得到父塊內容的Jinja2

//global template 
{% block target %} 
    <some_content_from_top> 
{% endblock %} 

//parent template 
{% extends 'top.html' %} 
{% block target %} 
    <some_content_from_parent> 
{% endblock %} 

//child template 
{% extends 'parent.html' %} 
{% block target %} 
    <some_content> 
{% endblock %} 

我可以使用類似的東西,以獲得在特定模板此塊內容不inheritanse

template_source = self.env.loader.get_source(self.env, template_path)[0] 
parsed_content = self.env.parse(template_source).body 
# do something with blck content 

但我怎麼能得到所有父內容templates.Of當然,我能得到父母來自Extends塊的模板名稱並重復執行相同的操作tiil我得到沒有Extends塊的頂級模板。但也許有更有效的方法?

UPD:我錯過了我的問題的重要組成部分。我使用{{超()}}在我的塊,我需要得到所有繼承的內容不是在渲染頁面,但通過命令行腳本解析的內容。

//global template 
{% block target %} 
    <some_content_from_top> 
{% endblock %} 

//parent template 
{% extends 'top.html' %} 
{% block target %} 
    {{ super() }} 
    <some_content_from_parent> 
{% endblock %} 

//child template 
{% extends 'parent.html' %} 
{% block target %} 
    {{ super() }} 
    <some_content> 
{% endblock %} 



# script content 
template_source = self.env.loader.get_source(self.env, template_path)[0] 
parsed_content = self.env.parse(template_source).body 

我需要得到所有模板中的所有內容解析的內容

回答

3

您可以在父模板使用Jinja2's super function包含內容從一個塊。

top.html

{% block target %} 
    <some_content_from_top> 
{% endblock %} 

parent.html

{% extends 'top.html' %} 
{% block target %} 
    <some_content_from_parent> 
    {{ super() }} 
{% endblock %} 

child.html

{% extends 'parent.html' %} 
{% block target %} 
    {{ super() }} 
    <some_content> 
{% endblock %} 

這將導致:

<some_content_from_parent> 
<some_content_from_top> 
<some_content> 
+0

我很抱歉,我錯過了我的問題的一些重要人員。更新問題 –