我将 django-rest-framework 与 NamespaceVersioning 结合使用。我的主要 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'),
]
不知何故,我无法反转这些 URL。为什么我不能这样做?我得到一个 NoReverseMatch
异常。
reverse('some')
我无法理解 Django 的命名空间,但它不应该只使用最后定义的路由吗?如果我从主 url 中删除命名空间参数,一切正常。
编辑
同样无效:
reverse('v1:some')
我还可以补充一点,在我的主 urls 文件中,我将多个 urls 文件包含到 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')),
...
最佳答案
在 django 中反转 url 名称时,您必须使用 namespace:url-name
模式反转。
你的反向调用应该是这样的:
reverse('v1:some')
参见:How to use reverse()
in django
更新:您在多个 url 条目上使用相同的命名空间。保持 url 命名空间的唯一性。
关于django - 版本化 API 的命名空间 URL 的基本逆向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36423108/