2016-12-09 92 views
2

如何讓兩個結構相同的網址生效? 我不想在URL之前添加任何前綴。我希望所有的觀點是example.com/[slug]兩個結構相同的網址

這裏是我的網址:

url(r'^(?P<slug>[-_\w]+)', views.CategoryArticlesView.as_view(), name='single_category'), 
url(r'^(?P<slug>[-_\w]+)', views.SingleArticleView.as_view(), name='single_article'), 

我可以很容易地通過它像第一URL前添加前綴工作:

url(r'^**category/**(?P<slug>[-_\w]+)', views.CategoryArticlesView.as_view(), name='single_category'), 

但我想它沒有前綴。 現在它只匹配第一個URL但不匹配第二個URL。

+1

你可以做到這一點,檢查匹配類別或文章直接在你的視圖中,然後調用相應的動作。但是這種方法被認爲是一種非常糟糕的做法,因爲它完全消除了Django路由系統的好處。 – Nevertheless

回答

3

你不能這樣做你想要的。相反,你可以添加其他視圖,您可以根據這樣一些條件派遣您的要求:

def some_view(request): 
    if some_condition: 
     return CategoryArticlesView.as_view()(self.request) 
    else: 
     return SingleArticleView.as_view()(self.request) 

現在,您的網址配置可以是:

url(r'^(?P<slug>[-_\w]+)', views.some_view, name='some_name'), 
2

您無法創建兩個具有相同模式的網址,Django按順序遍歷每個網址格式,並停在第一個與請求的網址匹配的網址。見how-django-processes-a-request