2009-12-14 64 views
19

在我的Django應用程序的master模板看起來是這樣的:嵌套塊

{% block parent %} 
    Some text... 
    {% block child %} 
     Default content here... 
    {% endblock child %} 
    ...some more text 
{% endblock parent %} 

現在,這個模板應該在某種程度上被覆蓋了child塊被改變:

{% extends "master.html" %} 

{% block child %} 
    New content here... 
{% endblock child%} 

但是,渲染保持不變(在此處打​​印「默認內容...」)。我錯過了一些顯而易見的東西,或者是嵌套塊不可能? (或者,違反DRY原則,是否需要重新定義parent塊?)

編輯:我正在使用Django 1.1,如果有問題。

+2

這裏還有一些錯誤,因爲(也使用1.1)我無法複製這個問題。對於我來說,簡單地覆蓋子塊,不需要引用父塊,就能獲得理想的效果。 – 2009-12-14 13:34:02

+0

是的,你說得對。請參閱下面的答案。感謝您的關注。 – Boldewyn 2009-12-14 13:49:12

回答

9

OK,它在Django的模板系統中的錯誤。對於大多數其他情況,本詹姆斯是正確的(請參閱他對我上面的問題的評論)。

在我的情況下,child塊在{% ifnotequal a b %}塊內,而表示打破塊繼承。我認爲這是一個錯誤,因爲這類操作有幾十個自然用例。

The corresponding ticket

+1

總是_test_你發佈的代碼是一個好主意,而不是假設你拿出的東西不會影響結果。 – 2009-12-14 14:09:16

+0

的確,真的......我首先有一個自定義的模板標籤,並且懷疑是這樣,但拋出後我沒有考慮ifnotequal。 – Boldewyn 2009-12-14 15:17:22

1

這樣做:

{% extends "master.html" %} 

{% block parent %} 
    {% block child %} 
     New content here... 
    {% endblock child%} 
{% endblock parent %} 
+3

如果基本「父」塊包含「子」塊以外的其他內容,該怎麼辦? – 2009-12-14 13:26:57

+2

感謝您的回答,但不幸的是它沒有用。這部分是我的錯誤,我更新了上面主模板的示例。問題:主模板的原因是,其中有更多數據。如果我按照你的建議去做,所有這些額外的數據當然會丟失。 – Boldewyn 2009-12-14 13:28:24