2013-02-25 85 views
2

我有一個模板,看起來像這樣充滿:塊中包含的文件不被擴展模板

{% include "base/top.html" with context %} 
{% include "base/nav.html" with context %} 
<div id="content"> 
    Stuff 
    {% block content %}{% endblock %} 
</div> 
{% include "base/bottom.html" with context %} 

base/nav.htmlbase/bottom.html包含靜態的內容,但base/top.html包含{% block title %}。所以,當我有第二個模板,試圖繼承第一個文件,像這樣:

{% extends firstfile.html %} 
{% block title %}Imarealpage!{% endblock %} 
{% block content %}Lorem ipsum dorem smitshm{% endblock %} 

{% block title %}部分不會被渲染。如何確保它以及擴展模板中定義的包含文件中的任何其他塊按其應該的方式呈現?

回答

1

你誤會了{% include %}的工作原理。 {% include %}標籤是而不是預處理器;它在渲染之前不會將包含的模板代碼直接放入包含的模板中。相反,{% include %}會觸發包含模板的新獨立模板呈現(就像您直接從您自己的代碼中呈現包含的模板一樣),然後將呈現的結果包含到所包含模板的呈現中。

這意味着包含的模板與其包含的模板有完全分離的繼承層次結構。例如,你可以有一個基地component.html模板,其中有一些塊,然後有例如。 foo-component.html{% extends "component.html" %}開始,並從component.html填充一些塊。然後你可以有一個layout.html{% include "foo-component.html" %},並且這將會渲染foo-component.html,完成它的繼承component.html,然後把結果放到layout.html的那個位置。但layout.html中的任何塊與component.html中的任何塊之間都沒有關係 - 它們是具有獨立塊結構和繼承層次結構的獨立呈現。