2010-08-11 102 views
8

在Django的模板系統中,如果我有一個要使用if語句進行選擇的塊,我該怎麼做?有沒有一種方法可以在Django模板中使塊可選

我是想這樣的:

{% if val %}{% block title %}Archive {{ foo }}{% endblock %}{% endif %} 

但是,這並不工作。有沒有辦法做到這一點,所以對於一個給定的值(在這種情況下爲空),塊不會被髮出,並且基礎模板使用原始值?

編輯: 讓我更具體一點,以便更容易回答。

我有一頁每頁10條目。然後用戶可以進入下一頁並查看接下來的十個項目。對於每一個更進一步的頁面,我們希望標題標籤會說「Archive 1」或「Archive 10」,但如果他們回到原始頁面,它就不再存檔了,它應該只需轉到已在基本模板中提供的原始網站標題即可。

+0

我不知道你的問題的答案,但你知道'默認'過濾器 - 這是否做你想要的? http://docs.djangoproject.com/en/dev/ref/templates/builtins/#default – 2010-08-11 13:18:53

+0

感謝Dominic,我正在尋找類似的東西,但我沒有找到一種方法來分配默認值,我我試圖弄清楚我是否可以在if語句中添加if語句? – Vernon 2010-08-11 13:33:32

回答

8

據我所知block是佔位符在子模板中被「覆蓋」。它們必須在「編譯時」定義,而不是在「運行時」定義。

至於你的具體問題,爲什麼不根據頁碼修改標題(假設你使用分頁)?就像這樣:

{% block title %} 
    {% ifequal page 1 %}Current{% else %}Archive {{ page }}{% endifequal %} 
{% endblock %} 
15

我遇到了類似的問題,我正在處理一個項目。以下是我解決它使用{{block.super}}從父塊拉默認值:

我父模板包含:

{% block title %}Default Title{% endblock %} 

我的孩子模板包含:

{% block title %} 
    {% if new_title %}{{ new_title }}{% else %}{{ block.super }}{% endif %} 
{% endblock %} 

*注意:如果您打算在HTML標題標記中使用結果,您可能希望將代碼封裝在{%spaceless%} {%endspaceless%}中。

(它看起來像喬丹瑞特張貼在原來的問題的意見相同的解決方案我響應之前一點。)

+0

謝謝,我從一開始就知道,如果我在塊內部陳述語句,我只是想知道,如果我想讓一個塊可選 - 我猜不是。 – Vernon 2010-08-13 06:08:25

+0

太棒了!這使我可以根據表單值打開/關閉塊(所以我可以得到可打印版本的結果)。 – sage 2015-10-05 03:01:40

+1

'{{block.super}}'做了訣竅。 – AliBZ 2016-05-26 18:05:44

0

我將只需要添加到很好的答案,取決於Django的版本有時上面{{ block.super }}將內容從主兩次,這似乎發生在最新版本的Django中。

我使用Django 1.8,每當我把{{ block.super }}它開始以這種方式來表現的,正如除了傑米的答案,我可以說的是,在基本模板你想

{% block title %} Default Title {% endblock %} 
你可以把內容

然後在孩子中,如果你想讓頁腳被繼承和顯示,就不要做任何事情。但是,如果你不想顯示該塊然後把標籤的孩子與空內容,就像這樣:

{% block title %} 

{% endblock %} 

然後,它會被隱藏,一旦它也變爲可以覆蓋,如果在其上的內容你希望。

相關問題