Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django warning urls.W005 URL命名空间不为';t唯一_Python_Django_Django Urls - Fatal编程技术网

Python django warning urls.W005 URL命名空间不为';t唯一

Python django warning urls.W005 URL命名空间不为';t唯一,python,django,django-urls,Python,Django,Django Urls,我无法理解以下警告。我有一个名为“v1”的名称空间,我使用这些名称空间来确定API中的版本控制(使用django rest框架)。所以,我有这样的路径: /v1/accounts/me /v1/listings 以下是URL配置(project/url.py): accounts/url.py app_name = 'accounts' urlpatterns = [ url(r'^token/$', views.obtain_auth_token, name='obtain_tok

我无法理解以下警告。我有一个名为“v1”的名称空间,我使用这些名称空间来确定API中的版本控制(使用django rest框架)。所以,我有这样的路径:

/v1/accounts/me
/v1/listings
以下是URL配置(project/url.py):

accounts/url.py

app_name = 'accounts'

urlpatterns = [
    url(r'^token/$', views.obtain_auth_token, name='obtain_token'),
    url(r'^me/$', my_account, name='my_account'),
]
listings/url.py

app_name = 'listings'

urlpatterns = [
    path('', recent_listings, name='recent_listings')
]
一切正常。所有URL都被调度。版本控制是有效的。但是,我不断遇到以下错误:

?:(URL.W005)URL命名空间“v1”不是唯一的。您可能无法反转此命名空间中的所有URL


我知道这是一个警告,我也许能够抑制它;然而,我想了解为什么会发生这种情况。根据我的URLconf和此警告,似乎不能有多个名称空间路径作为“兄弟”。它们必须是一个名称空间路径(例如“v1”)的子路径。如果我的理解是正确的,我应该如何创建这个URL配置。

基本上,名称空间在查找URL时起着重要作用。例如:

在您的示例中,
reverse('v1:accounts\u token')
将返回
/v1/accounts/token/
。假设您在
帐户
列表
中有两个同名的url,那么您可能无法在反向查询中找到
帐户
url。这就是为什么这个警告是针对我们的。如果对每个包含使用不同的名称空间,效果会更好。在您的情况下,它应该是:

path('v1/accounts/', include('accounts.urls', namespace='accounts')),
path('v1/listings/', include('listings.urls', namespace='listings'))
有关更多详细信息,请阅读

更新 您可以按如下方式执行版本控制:

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

明白了,谢谢。对我来说,使用不同的名称空间是没有意义的,因为我依赖它们进行版本控制。嵌套的名称空间可能会工作,但根据我所看到的一切,我需要为该名称空间创建一个单独的应用程序(
include
function),必须指定应用程序名称。您知道是否有办法禁用此警告吗?您在执行版本控制时没有使用
名称空间
。您已经定义了
v1/../
,它已经表示版本控制。但也许它更适合这样做版本控制
/accounts/v1/token
。请看我的最新答案。谢谢你的帮助!我要多玩一点。为每个应用程序url编写版本是一个有趣的想法。
path('v1/token/', views.obtain_auth_token, name='obtain_token_v1'),
path('v2/token/', views.obtain_auth_token2, name='obtain_token_v2'),
...