django 警告 urls.W005 URL 命名空间不是唯一的
django warning urls.W005 URL namespace isn't unique
我无法理解以下警告。我有一个名为 "v1" 的名称空间,我正在使用这些名称空间来确定 API 中的版本控制(使用 django rest 框架)。所以,我有这样的路径:
/v1/accounts/me
/v1/listings
这里是 URLs 配置(project/urls.py):
urlpatterns = [
path('admin/', admin.site.urls),
path('v1/accounts/', include('accounts.urls', namespace='v1')),
path('v1/listings/', include('listings.urls', namespace='v1'))
]
accounts/urls.py
app_name = 'accounts'
urlpatterns = [
url(r'^token/$', views.obtain_auth_token, name='obtain_token'),
url(r'^me/$', my_account, name='my_account'),
]
listings/urls.py
app_name = 'listings'
urlpatterns = [
path('', recent_listings, name='recent_listings')
]
一切正常。所有网址均已发送。版本控制工作。但是,我不断收到以下错误:
?: (urls.W005) URL namespace 'v1' isn't unique. You may not be able to reverse all URLs in this namespace
我知道这是一个警告,我也许可以抑制它;但是,我想了解为什么会这样。根据我的 URLconf 和这个警告,似乎不能有多个命名空间路径,因为 "siblings." 它们需要是一个命名空间路径的子路径(例如 "v1")。如果我的理解是正确的,我应该如何创建这个 URL 配置。
基本上发生的事情是,命名空间在 reverse 找到 url 方面发挥着重要作用。例如:
在您的示例中 reverse('v1:obtain_token')
将 return /v1/accounts/token/
。假设您在 accounts
和 listings
中有两个同名的 url,那么您可能无法在反向查询中找到 accounts
url。这就是警告的原因。如果您为每个包含使用不同的名称空间会更好。在你的情况下,它应该是:
path('v1/accounts/', include('accounts.urls', namespace='accounts')),
path('v1/listings/', include('listings.urls', namespace='listings'))
请阅读documentations了解更多详情。
更新
您可以像这样进行版本控制:
path('accounts/', include('accounts.urls', namespace='accounts')), # accounts url
内部帐户应用程序:
path('v1/token/', views.obtain_auth_token, name='obtain_token_v1'),
path('v2/token/', views.obtain_auth_token2, name='obtain_token_v2'),
...
我无法理解以下警告。我有一个名为 "v1" 的名称空间,我正在使用这些名称空间来确定 API 中的版本控制(使用 django rest 框架)。所以,我有这样的路径:
/v1/accounts/me
/v1/listings
这里是 URLs 配置(project/urls.py):
urlpatterns = [
path('admin/', admin.site.urls),
path('v1/accounts/', include('accounts.urls', namespace='v1')),
path('v1/listings/', include('listings.urls', namespace='v1'))
]
accounts/urls.py
app_name = 'accounts'
urlpatterns = [
url(r'^token/$', views.obtain_auth_token, name='obtain_token'),
url(r'^me/$', my_account, name='my_account'),
]
listings/urls.py
app_name = 'listings'
urlpatterns = [
path('', recent_listings, name='recent_listings')
]
一切正常。所有网址均已发送。版本控制工作。但是,我不断收到以下错误:
?: (urls.W005) URL namespace 'v1' isn't unique. You may not be able to reverse all URLs in this namespace
我知道这是一个警告,我也许可以抑制它;但是,我想了解为什么会这样。根据我的 URLconf 和这个警告,似乎不能有多个命名空间路径,因为 "siblings." 它们需要是一个命名空间路径的子路径(例如 "v1")。如果我的理解是正确的,我应该如何创建这个 URL 配置。
基本上发生的事情是,命名空间在 reverse 找到 url 方面发挥着重要作用。例如:
在您的示例中 reverse('v1:obtain_token')
将 return /v1/accounts/token/
。假设您在 accounts
和 listings
中有两个同名的 url,那么您可能无法在反向查询中找到 accounts
url。这就是警告的原因。如果您为每个包含使用不同的名称空间会更好。在你的情况下,它应该是:
path('v1/accounts/', include('accounts.urls', namespace='accounts')),
path('v1/listings/', include('listings.urls', namespace='listings'))
请阅读documentations了解更多详情。
更新
您可以像这样进行版本控制:
path('accounts/', include('accounts.urls', namespace='accounts')), # accounts url
内部帐户应用程序:
path('v1/token/', views.obtain_auth_token, name='obtain_token_v1'),
path('v2/token/', views.obtain_auth_token2, name='obtain_token_v2'),
...