django - DRF Browsable API 仅显示一台路由器

标签 django django-rest-framework django-urls python-3.4

本质上,根据我将路由添加到 urlpatterns 的顺序,可浏览的 API 一次只会显示一个路由器。这是我的代码:

url.py:

from django.conf.urls import url, include
from rest_framework import routers

from .views import PlantViewSet

# url router
router = routers.DefaultRouter()
router.register(r'plants', PlantViewSet, base_name='Plants')

djoser_urls = [url(r'^', include('djoser.urls')), ]

urlpatterns = [
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    url(r'^docs/', include('rest_framework_swagger.urls')),
    # url(r'^', include(router.urls)),
    # url(r'^', include('djoser.urls')),
] + djoser_urls + router.urls

这仅显示 djoser 网址:

djoser_only

但是只需颠倒我添加网址的顺序:

url.py:

from django.conf.urls import url, include
from rest_framework import routers

from .views import PlantViewSet

# url router
router = routers.DefaultRouter()
router.register(r'plants', PlantViewSet, base_name='Plants')

djoser_urls = [url(r'^', include('djoser.urls')), ]

urlpatterns = [
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    url(r'^docs/', include('rest_framework_swagger.urls')),
    # url(r'^', include(router.urls)),
    # url(r'^', include('djoser.urls')),
] + router.urls + djoser_urls

这仅显示路由器 url!

router_only

当我只使用我注释掉的 include() 行时,也会发生同样的事情,列表中第一个是唯一显示的路由器。此外,无论哪个路由器被选中,api-auth/docs/ url 都不会显示。有没有办法获得统一的 api 根而不必创建自己的自定义 View ?

最佳答案

这与 Django REST 框架没有任何关系,它的发生是因为 Django 处理重复 URL 的方式。

您正在尝试让两个不同的 View 处理单个 URL:DRF 路由器索引和 djoser Root View 。 Django 将仅显示与其找到的搜索模式匹配的第一个 View ,这通常是 url 模式中包含的第一个 url。

Django REST 框架也不会检测多个可用的路由器并将它们分组在同一页面上,这听起来就像您希望看到的那样。即使可以,djoser doesn't use a router所以 DRF 不可能真正知道包含它。

Is there anyway to get a unified api root without having to create my own custom view?

所以回答主要问题:不,Django REST 框架不可能自动将这些 View 分组在一起。您将需要创建自己的客户 View 来处理此问题。

关于django - DRF Browsable API 仅显示一台路由器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30020723/

相关文章:

python - Django - URL 路由问题(无法导入名称 'urls')

python - 处理 url 参数类型的好方法是什么?

python - 可以从django开发服务器下载文件吗

python - 使用 django-rest-framework 设置对象级权限

django - 在 Django 后端使用 Angular JS 路由的最佳实践方法是什么?

ManyRelatedField 的 Django REST Framework 序列化

python - 如何提供 API 来获取 django-rest 中任何模型的更改历史记录?

html - django表单发布到另一个表单

django:为多语言站点生成站点地图

python - Django 对象存在