与版本化API的命名空间URL基本相反

时间:2016-04-05 10:00:07

标签: django django-rest-framework

我使用带有NamespaceVersioning的django-rest-framework。我的主要urls.py看起来像这样:

...
url(r'^api/v1/', include('my_api.api_urls', app_name="api", namespace='v1')),
...

在my_api.api_urls.py中:

urlpatterns = [
    url(r'^some-endpoint/$', api_views.MyView.as_view(), name='some'),
]

不知何故,我无法撤消这些网址。为什么我不能这样做?我收到NoReverseMatch例外。

reverse('some')

我无法围绕django的命名空间,但不应该只使用最后定义的路线?如果我从主网址中删除命名空间参数,一切正常。

修改

也不行:

reverse('v1:some') 

我可能还会补充说,在我的主网址文件中,我将多个网址文件包含在api / v1 /前缀中:

...
url(r'^api/v1/', include('my_api.api_urls', app_name="api", namespace='v1')),
url(r'^api/v1/', include('my_other_api.api_urls', app_name="api", namespace='v1')),
...

1 个答案:

答案 0 :(得分:5)

在django中反转网址名称时,您必须使用reverse('v1:some') 模式进行反转。

您的反向通话应如下所示:

<input>

请参阅:How to use reverse() in django

更新:您在多个网址条目上使用相同的命名空间。保持url名称空间的唯一性。