2012-08-23 34 views
25

我一直在試圖調用django模板中的if條件內的塊。我有一個base template。我有很多擴展基本模板的其他模板。 我已經在基礎模板中定義的塊:在if條件中調用塊:django模板

{% block test_block %}Test{% endblock %} 

然後我希望覆蓋在其他模板一定條件下此塊。如果條件失敗,該塊不應被覆蓋。這事我已經寫了:

{% if test_value %}{% block test_block %}Development{% endblock %}{% endif %} 

這實際上(或實際上可以是)忽略的,如果條件。

我終於做到了:

{% block test_block %}{% if test_value %}Development{% else %}{{ block.super }}{% endif %}{% endblock %} 

我不得不做這樣的事情到處有人需要。

這是最好的方法嗎?這是唯一的方法嗎?爲什麼我不能嘗試我的第一種方式?或者我身邊有什麼錯誤嗎?

+0

你的django版本是什麼? –

+0

另請參閱http://stackoverflow.com/questions/942797/why-cant-i-nest-a-block-tag-inside-an-if-tag – Bryce

+0

謝謝,我一直在這個頭上打了幾個小時 – pmont

回答

13

你沒有犯過錯 - 模板塊被包括在內,不管它們周圍有什麼條件。

self.blocks = dict([(n.name, n) for n in nodelist.get_nodes_by_type(BlockNode)]) 

{% extends %}正在呈現,它將從直接在模板中的所有塊節點,並將它們存儲在父遇到渲染:您可以從Django source code此行ExtendsNode類的django/template/loader_tags.py的看到這那些block s。不考慮孩子的這些塊是否在條件內。

+0

有沒有解決方法? – jsmedmar