2012-02-12 50 views
18

我無法弄清楚如何使用Jinja2從包含的模板中修改塊。以下是我使用三個文件的示例。Jinja2繼承與塊和包括

base.html文件:

<html>{% include "content.html" %}</html> 

content.html:

<h1>{% block title %}Title{% endblock title%}</h1> 
<div>{% block content_body %}Content Body{% endblock content_body%}</div> 

story.html

{% extends "base.html" %} 
{% block title %}story.title{% endblock title %} 
{% block content_body %}story.description{% endblock content_body %} 

當渲染story.html,我會得到:

<html> 
<h1>Title</h1> 
<div>Content Body</div> 
</html> 

我將如何呈現預期值?

+2

@ArminRonacher在你需要他的時候在哪裏 - 我有一種感覺,認爲這是由'include'content.html''覆蓋'story'中相同命名塊的內容引起的,即使'story'覆蓋了'base ' - 但我沒有看到文檔中的任何內容表明這是可以預料的。 – 2012-02-22 04:31:07

回答

12

base.html未呈現,因爲它沒有被任何模板調用。你可以是擴展的第二級:

base.html文件:

<html>{% block html %}{% endblock %}</html> 

content.html:

{% extends "base.html" %} 
{% block html %} 
<h1>{% block title %}Title{% endblock title%}</h1> 
<div>{% block content_body %}Content Body{% endblock content_body%}</div> 
{% endblock %} 

不過,這可能是矯枉過正,你很可能會發現單個基本模板就足夠了(即將base.htmlcontent.html合併成一個模板)。

+0

這是模板檢查django模板的正確解決方案,他們做類似的事情來理解概念。 – Bedros 2015-06-24 18:50:46