我想在主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映射建议其他模式(最佳实践)。
答案 0 :(得分:1)
您的第二个版本的网址正确终止了帐户列表模式,但您的第一个版本没有。
url(r'^$', AccountListView.as_view()),