【问题标题】:Two URLs with same structure具有相同结构的两个 URL
【发布时间】:2017-04-25 09:32:33
【问题描述】:

如何使两个具有相同结构的 URL 起作用? 我不想在 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 而不是第二个。

【问题讨论】:

  • 你可以这样做,直接在你的视图中检查匹配的类别或文章,然后调用相应的动作。但是这种方法被认为是一种非常糟糕的做法,因为它完全消除了 Django 路由系统的好处。

标签: python django django-urls


【解决方案1】:

您不能创建具有相同模式的两个 url 汽车 Django 按顺序运行每个 URL 模式,并在与请求的 URL 匹配的第一个模式处停止。见how-django-processes-a-request

【讨论】:

    【解决方案2】:

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

    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'),
    

    【讨论】:

      猜你喜欢
      • 2018-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-14
      • 2015-03-21
      • 1970-01-01
      相关资源
      最近更新 更多