2012-06-12 44 views
0

我有一個django模板 - 通常通過標準獲取請求加載的模板。不過,我也想用這個模板來獲取ajax。django ajax和非ajax模板

我知道我可以使用request.is_ajax區分呼叫,從而制定出頁我應該服務 - 什麼我不知道的是如何避免複製。

問題是,頁面擴展了一個基本的htm文件 - 一個有所有的花裏胡哨的(你知道,標題,菜單等)。我不希望這出現在ajax頁面!我想有什麼頁面出現,不是擴展基地htm

我只能認爲,也許我有兩個文件 - 一個只有內容(ajax版本)和另一個擴展基地htm ,並以某種方式進口(不擴展)的第一個文件...

任何IDE如何我會做上述,或者我的意思是如何解決這一般?

回答

11

除了@Daniel響應,如果在上下文處理器中有request,則可以使用yesno模板過濾器,例如

{% extends request.is_ajax|yesno:"base_ajax.html,base.html" %} 

此行應該位於您用於頁面和ajax內容的每個模板中。

+1

哦,這很棘手。我喜歡。 –

+0

非常好.... greap投票! – Goin

+0

這是如此優雅,他們正在重拍「蒂芙尼的早餐」,而不是赫本 – bharal

2

extends的值可以是一個變量。因此,您只需定義一個base_ajax html,省略「鈴聲和哨聲」,並且在您看來,您將發送basebase_ajax到模板上下文,具體取決於。

0

解決方案1:

base.html文件:

{% block menu %} 
menu goes here 
{% endblock menu %} 

非ajax.html:

{% extends base.html %} 

ajax.html:

{% extends base.html %} 

{% block menu %} 
{% end block %} 

解決方案2:

使用相同base.html文件

Ajax的和非ajax.html:

{% extends base.html %} 
{% ifequal ajax %} 
{% block menu %} 
{% end block %} 
{% endifequal %}