2010-08-19 64 views
0

我有一些頁面,例如我想要顯示的用戶協議,有或沒有佈局(extends標記),具體取決於它的調用方式。我正在使用jQuery Fancybox將這些頁面加載到iframe中。如果JS被禁用,鏈接應該在一個新的窗口中打開,這個窗口是完整的佈局,否則,如果它們在iframe中,他們不需要佈局。如何獲得一個無版面的頁面版本?

截至目前,我使用jQuery來去掉頁眉/頁腳(只有在內容部分替換正文)

if(window.location != window.parent.location) { 
    $('body').html($('#content')); 
} 

做什麼,但它看起來不正確加載的東西,可以永遠不會被顯示(或者更糟的是,直到JS開始時纔會顯示半秒)。我想我可以做的是創建一個只包含內容的部分模板,然後創建兩個容器頁面,一個是頁眉/頁腳,另一個是沒有的頁面;他們都包括部分。然後使用JS來修改鏈接......這將不得不指向不同的視圖,這又會調用不同的模板......看起來好像很多工作。有更好的方法嗎?


@ZeissS:

像這樣的東西是可能在Django:

{% if not iframe %} 
    {% extends "layouts/default.html" %} 
{% endif %} 

{% extends %}標籤必須在模板中的第一個標籤,因此不能有條件地發表了評論。我想也許我可以在佈局中做到這一點...然後它會適用於我的所有網頁....讓我們試試這個。

+2

(我不知道django)保留一個視圖,但是移動頁眉/頁腳到外面並在包含文件中做一個'if',在那裏檢查一個查詢參數。你不需要創建多個視圖/寺廟。 – ZeissS 2010-08-19 21:30:56

回答

1

使用布賴恩和馬克的回答,你可以寫你自己的上下文處理器的基礎: http://docs.djangoproject.com/en/1.2/ref/templates/api/#writing-your-own-context-processors

這樣做將讓你使用,如果在你的模板語句有條件地服務。

可能是最優雅的,因爲您仍然可以根據需要使用包裝。

您可以將其與您自己的模板標籤結合使用,該模板標籤爲您提供了擴展功能,但是基於提供的變量提供了條件。 (不確定您是否可以複製擴展功能)。

http://docs.djangoproject.com/en/1.2/howto/custom-template-tags/#writing-custom-template-tags

另一種選擇是使用Django的{% include %}標記,你可以用,使用if語句。

+0

我已經嘗試複製擴展功能,因爲我有另一個問題。這並不容易。使用上下文處理器也可以。 – mpen 2010-08-20 03:39:45

+0

是的,我並不感到驚訝。擴展將是一個相當獨特的。然而,只看擴展代碼,看起來擴展需要一個變量。所以你可以有條件地改變這個變量,並從一個最小的模板或全功能的模板擴展? – 2010-08-20 03:49:44

+0

我甚至不確定有條件地延長會解決問題......實際上,我相信它不會。那麼,除非我有條件地選擇一個*不同*模板來擴展。但我實際上確實希望佈局中的所有''東西,而不是頁眉和頁腳。我提示了一些關於在這裏擴展擴展節點的討論:http://stackoverflow.com/questions/3209715/how-to-make-a-template-extend-another-one/3385098#3385098如果感興趣 – mpen 2010-08-20 05:17:18

1

您始終可以傳遞GET參數並加載其他模板或更改模板本身。

對於一些URL象example.com/some/view/?show_simple=yes:

show_simple = request.GET.get('show_simple', False) 

if show_simple: 
    # return minimal template 
# return regular template 
+0

我不太確定'request.GET.get('show_simple',False)'返回如果'show_simple'實際上沒有給定值......但它應該是true。因此,我認爲request.GET'中的'show_simple'會更好。您接近解決方案,但您的答案仍然需要兩個不同的模板......最好將show_simple'傳遞給模板並在那裏執行邏輯。 – mpen 2010-08-20 01:06:33

0

修改您的佈局,以有條件地包括頁眉頁腳...

{% if not iframe %} 
    <div id="header"> 
     ... 
    </div> 
    {% endif %} 

然後就是將{'iframe':'iframe' in request.GET}傳入您的模板。瞧!幾乎沒有我想象的那麼糟糕。