django - 版本化 API 的命名空间 URL 的基本逆向

标签 django django-rest-framework

我将 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/

相关文章:

python - 在 Python 中覆盖 "remaining elements truncated"

django - 如何自定义 JWT 响应的负载部分

python - Django REST Framework 的 APIClient 将 None 作为 'None' 发送

python - 设置 DateTimeField 的最小值

django - Django-Rest-Framework (DRF) Views 和 Serializers 可以取代 Django native View 和表单吗

python - 是否可以为每个模型自动创建 View 集和序列化器?

python - 当我在Python中发出post请求时,如何调用函数?

django - 当 Django 提供 manifest.json 时,Chrome 显示 'No manifest detected'

python - 在 Django Graphene Relay 中启用基于 PK 的过滤,同时保留全局 ID

python - Django PositiveIntegerField 接受否定