2010-10-21 74 views
11

为了说明我的问题更清楚,让我们假设我有内容的include.html模板:Django模板:为什么阻止包含的模板不能被子模板覆盖?

{% block test_block %}This is include{% endblock %} 

我有一个名为parent.html与内容这样的另一个模板:

This is parent 

{% include "include.html" %} 

现在我创建一个名为child.html的模板parent.html:

{% extends "parent.html" %} 
{% block test_block %}This is child{% endblock %} 

我的想法是,当呈现child.html时,ch中的test_block ild.html可以覆盖include.html中的一个。根据我的理解,当包含一个模板时,它将被包含在内。所以在我的情况下,我认为parent.html等于:

This is parent 

{% block test_block %}This is include{% endblock %} 

因此,child.html应该能够覆盖test_block。但看起来它不能。为什么?有没有解决方法?

回答

13

当您包含模板时,它将呈现模板,然后包含呈现的内容。

从Django文档:

的包括标签应被视为实现“使这个子模板,并包括HTML”,而不是“分析此子模板,包括它的内容就好像它是一部分的父母“。这意味着包含模板之间不存在共享状态 - 每个包含都是完全独立的呈现过程。

一种解决方法是将有子模板延长包括模板,而不是包括模板。然后,包含子模板。