2010-03-09 50 views
0

我有一個網站在django中運行,並且希望在第三方網站上提供它。django - 更改iframe中的內容

在這些網站中,他們通過標記使我的內容可用。

當我的網站在該iframe中請求時,我想修改內容(刪除標題,過濾數據等)。

這樣做的最好方法是什麼?

有沒有什麼辦法知道請求是由iframe做出的?

倍數網站將請求相同的網址,我可以根據請求網站更改內容嗎?

謝謝!

PS:對不起我的英文不好:/

編輯

好吧,我知道了。但我有另一個問題:

1-我如何告訴我的頁面鏈接(一個href)追加「第三方」sufix?最好將我所有的鏈接都改爲「相對」路徑?

2-我想以某種方式完成某些頁面只需要全局更改(刪除頁眉/頁腳),而其他頁面則需要特殊內容。有辦法在我的上下文處理器中執行此操作嗎?

謝謝!

回答

2

你可以做的一件事是有兩個映射的URL:一個供第三方使用,一個供獨立django站點使用。

這兩個URL都會映射到相同的django視圖,但傳遞一個不同的參數,指示您希望模板的完整版本用於視圖,還是一個沒有頁眉,頁腳和第三方模板的其他部分的受限制的參數沒有興趣

使用模板inheritance或作文(有人會用include tag,但我總是提到它,因爲它是一個選項)來創建適當的模板 - 一個包含所有組件的獨立模板django網站以及僅有第三方感興趣的內容;並根據映射網址傳入的參數讓您的視圖使用其中一個或另一個。

因此,第三方會使用類似http://blah.com/thirdparty/abc/12的網址,其中/thirdparty/abc是第三方的網址;而您的主Django網站將使用http://blah.com/abc/12,其中/abc是獨立網站的網址。您可以同時映射到相同視圖並使用extra-options將參數傳遞給視圖,以指示要使用的模板。

我認爲試圖通過確定請求來自哪裏來解決問題是一個失敗的主張。

希望有所幫助。

PS。你的英語完全可以理解。


編輯:

建議在計算器上使用:如果你希望有人來闡述自己的答案,添加評論,他們的答案。這將使StackOverflow在頁面頂部的小電子郵件圖標中記下用戶應該檢查的答案。我只注意到您對該問題的編輯,因爲我正在檢查我的回覆中的拼寫錯誤。 :-)編輯的問題應該澄清問題,當然,但總是認爲如果澄清是通用的,或者如果它是一個答案的評論 - 有時你需要做的兩個!澄清你的問題,並在回答中添加評論以提醒受訪者這一變化。

回到手頭上的問題:

urls.py應該是這個樣子:

from django.conf.urls.defaults import * 

urlpatterns = patterns('app.views', 
    (r'^standalone/(?P<template>\w+)/(\d{4})/$', 'view_callable'), 
) 

因此,捕獲並送至視圖可調用的參數之一(即我想象力稱爲view_callable)是「模板」,指示要使用的模板。

現在你有兩個選擇:

一)建立使用繼承兩個模板 - 這樣一個沒有頁眉/頁腳,第二個,從第一個繼承,添加必要的額外的方向 - 有觀點決定哪些模板要根據urls.py的模板參數進行渲染。通過這種機制,每個模板都知道在其構建的URL中添加適當的模板類型。因此,包含標題的模板將構建將「完整」或「inapp」指示器作爲「模板」參數傳遞給urls.py的網址。

b)使用合成構建一個模板 - 因此模板有條件地包含頁眉和頁腳,具體取決於從視圖傳入的參數,然後決定根據來自urls.py的模板參數設置參數。通過這種機制,模板通過查看視圖設置的參數知道在其構建的URL中添加適當的模板類型。

a)的優點是,您可以爲獨立模板和第三方模板構建完全不同的外觀。另外,如果您打算使用兩個模板,則可以在每個視圖的兩個網址中打破urls.py;像:

from django.conf.urls.defaults import * 

urlpatterns = patterns('app.views', 
    (r'^standalone/standalone/(\d{4})/$', 'view_callable', {'template':'complete'}), 
    (r'^standalone/thirdparty/(\d{4})/$', 'view_callable', {'template':'thirdparty'}), 
) 

這將使你做的意見reverse()來電或模板url調用和動態建立聯繫。

b)的優點是你只有一個模板來維護。沒有更新一個而忘記另一個的風險。

要回答你的第二子問題,我想我需要一個例子來理解你的意思......

記住,可能有其他的方式來做到這一點。這只是我想到的方式。

+0

的感謝!我只需要了解動態鏈接。 這是我的例子: (r'^/rank/$','foo.views.rank'), (r'^(?P \ w +)/ rank/$','foo.views。排名'), 在我看來,'排名'只有一個模板。 裏面,我怎麼能改變我的鏈接使用(或不)前綴'group_name'? 這就好像當用戶訪問'/ foo/rank /'時,所有鏈接都可以使用sufix'/ foo /'。 我不能得到如何用{%url%}做到這一點。 – fabriciols 2010-03-09 19:59:51

+1

那麼,你不應該在模板中不使用url標記的情況下創建鏈接。如果您使用url標記,則可以將SUFFIX作爲參數傳遞給方法。閱讀更多關於url()的信息:http://docs.djangoproject.com/en/dev/ref/templates/builtins/#ttag-url – cethegeek 2010-03-10 15:29:13

1

對於使用不同URL的情況(例如,當使用lightbox在iframe中打開鏈接,但在新標籤中打開相同鏈接時已修改內容),我可能會有其他選擇。

我解決我的問題,加入以下腳本可在iframe中加載的頁面的模板:

<script type="text/javascript"> 
    function inIframe() { 
     try { 
      return window.self !== window.top; 
     } catch (e) { 
      return true; 
     } 
    } 
    if(inIframe()) { 
     $('header').css('display', 'none'); 
     $('footer').css('display', 'none'); 
     // or anything else you may want to do 
    } 
</script>