两个具有相同结构的 URL

Two URLs with same structure

如何使两个具有相同结构的URL工作? 我不想在 URL 之前添加任何前缀。我希望所有视图都是 example.com/[slug].

这是我的 URLs:

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 Django 按顺序运行每个 URL 模式,并在第一个与请求的 URL 匹配的模式处停止。见 how-django-processes-a-request

你不能那样做你想做的事。相反,您可以添加另一个视图,您可以在其中根据如下条件发送请求:

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

现在,您的 url 配置可以是:

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