【问题标题】:Django REST url does not match patternsDjango REST url 与模式不匹配
【发布时间】:2017-03-22 17:13:55
【问题描述】:

我想在主 urls.py 文件中保留带有应用名称的 URL 前缀。这样我将避免同一项目下其他应用程序中的端点冲突。

# project/urls.py
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^api/v1/accounts/', include('account.urls')),
    url(r'^api/v1/users/', include('users.urls')),
    url(r'^api/v1/transactions/', include('transactions.urls')),
    url(r'^auth-token-auth', views.obtain_auth_token),
]

例如,我将accounts.urls 包含以下内容:

urlpatterns = [
     url(r'^', AccountListView.as_view()),
     url(r'^(?P<pk>[0-9]+)/$', AccountDetailView.as_view()),
]

通过这种方式/api/v1/accounts/1 模式与AccountDetailView 不匹配。它总是返回第一个视图AccountListView

最有趣的是当我以下面提供的方式更改urlpatterns 定义时。所有端点都按预期工作。

# project/urls.py
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^api/v1/', include('account.urls')),
    url(r'^api/v1/', include('users.urls')),
    url(r'^api/v1/', include('transactions.urls')),
    url(r'^auth-token-auth', views.obtain_auth_token),
]

# account/urls.py
urlpatterns = [
     url(r'^accounts/$', AccountListView.as_view()),
     url(r'^accounts/(?P<pk>[0-9]+)/$', AccountDetailView.as_view()),
]

问题是如何通过在主 urls.py 中保留应用名称 api/v1/[app_name] 来解决此问题。也许您可以为 URL 映射建议其他模式(最佳实践)。

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    您的第二个版本的 URL 正确地终止了帐户列表模式,但您的第一个版本没有。

    url(r'^$', AccountListView.as_view()),
    

    【讨论】:

      猜你喜欢
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      • 2017-07-16
      • 2018-12-02
      • 2011-11-03
      • 2021-07-26
      相关资源
      最近更新 更多