2016-12-09 57 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