2015-05-04 22 views
0

我有呈現兩個不同的模板2點Django的看法。這些模板中的每一個都將包含指向相同第三個視圖的鏈接。如何告訴一個Django視圖誰叫它?

即第三視圖將使時應顯示的一個按鈕,如果第一個Django視圖/模板鏈接重定向到它,但呈現不同的按鈕,如果第二視圖/模板鏈接重定向到它的模板。 的URI在每個模板的鏈接將是這樣的:

/members/near/<from_uid>/profile/<to_uid>/ 

什麼是最強大的還是「最佳實踐」的方式告訴誰把它稱爲第三看法?我應該創建如下的鏈接嗎?

/members/near/<from_uid>/profile/<to_uid>/from/<view_name> 
/members/near/<from_uid>/profile/<to_uid>/from/<view_name> 

請問在請求中檢查HTTP referer頭字段會更好嗎?或者還有其他更好的技術可以做到這一點嗎?

順便說一句,我意識到我的URI不是RESTful,但我不覺得我的理解REST足夠好創建RESTful URIs,特別是當我有多個參數傳遞,因爲我與from_uidto_uid論點在這裏做。

謝謝!

回答

1

你可以有網址的一部分被用作參數。每個參數將根據提供的正則表達式設置。一個例子在這裏。一個視圖可以處理所有包含您提到的三個參數的網址。

url(r'^members/near/(?P<from_uid>\d+)/profile/(?P<to_uid>\d+)/from//(?P<view_name>\W+)/$', MyView.as_view(), name = 'my_named_view') 

然後在你看來,你只是拉這些參數從URL

from_uid = self.kwargs['from_uid'] 
to_uid = self.kwargs['to_uid'] 
view_name = self.kwargs['view_name'] 

if view_name == "....": 
    # render to template1 
elif view_name == "....": 
    # render to template2 
0

使用GET參數是這樣的...

模板1:
<a href="/third/view/?from=view1">Link</a>

模板2 :
<a href="/third/view/?from=view2">Link</a>

而在你的第三個視圖...
from_view = self.request.GET.pop('from') if from_view == 'view1': ... elif from_view == 'view2': ...

GET參數比在這樣的情況下URL拍攝參數比較合適。

+0

由於EJB。我喜歡你的解決方案,但另一個更符合我的代碼庫。我會在未來的項目上嘗試你的方法。 – William