2014-01-30 62 views
0

我有兩個基於類的視圖,比如說「Category」和「Product」。相同的URL模式,兩個不同的意見?

我試圖實現的事實際上很簡單。
「類別」中包含一個URL(比方說,「食物」),這意味着,當我打這樣的網址: mydjango.com/myapp/food/
它實際上搜索數據庫中是否存在具有一個URL匹配任何「類別」對象「的食物」。
URL模式是這樣的:這是包含在目錄配套配件「食」作爲URL
url(r'^(?P<rel_url>.+)/$', login_required(is_allowed(Category.as_view())), name='category')

現在讓我們假設我要訪問一個產品(從「產品」的模式)。例如:
mydjango.com/myapp/food/rice
在產品型號的url域看起來是這樣的,然後「食品/米」 後來我的URL模式看起來完全一樣,所不同的視圖的名稱。
問題是,Django只檢查第一個URL並告訴我沒有包含'food/rice'url的Category對象。這是有道理的,因爲該URL存儲在產品模型中。

更簡單的問題:如何根據匹配的模式訪問兩個不同的視圖? mydjango.com/myapp/food必須使用類別視圖(使用rel_url)
mydjango.com/myapp/food/rice不匹配任何類別,然後它使用產品視圖。

當我知道這不是好辦法的辦法,但是這是我發現的唯一的解決方案(應用程序是遠遠不僅僅是類別/產品更復雜)

回答

1

您需要區分基礎上, url模式,然後只需在您的urls.py中首先移動更具體的模式。將使用匹配的第一個模式。

這將導致你喜歡的東西:

url(r'^(?P<cat>[^/]+)/(?P<prod>[^/]+)/$', Product.as_view(), name='product') 
url(r'^(?P<cat>.+)/$', Category.as_view(), name='category') 
+0

在「產品」的模式,該網址是完整的URL。因此,在訪問數據庫之前,我無法真正區分它是產品還是類別。 – Depado

+0

上帝你是對的。謝謝你是天才' - ' – Depado

相關問題