DRF Browsable API 只显示一个路由器
DRF Browsable API only shows one Router
基本上,根据我将路由添加到 urlpatterns
的顺序,可浏览的 API 一次只会显示一个路由器。这是我的代码:
urls.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
个网址:
然而,只需颠倒我添加网址的顺序即可:
urls.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
这只显示 router
个网址!
当我只使用我注释掉的 include()
行时,会发生同样的事情,列表中最先出现的是唯一显示的路由器。此外,无论选择哪个路由器,都不会显示 api-auth/
和 docs/
url。有没有办法在不必创建我自己的自定义视图的情况下获得统一的 api 根目录?
这与 Django REST 框架没有任何关系,它的发生是因为 Django 如何处理重复的 urls。
您正在尝试让一个 url 由两个不同的视图处理:DRF 路由器索引和 djoser 根视图。 Django 只会显示第一个匹配它找到的搜索模式的视图,通常是 url 模式中包含的前 urls。
Django REST framework 也不会检测多个可用的路由器并将它们组合在同一页面上,这听起来像是您希望看到的。即使可以,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 框架不可能自动将这些视图组合在一起。您将需要创建自己的客户视图来处理此问题。
基本上,根据我将路由添加到 urlpatterns
的顺序,可浏览的 API 一次只会显示一个路由器。这是我的代码:
urls.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
个网址:
然而,只需颠倒我添加网址的顺序即可:
urls.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
这只显示 router
个网址!
当我只使用我注释掉的 include()
行时,会发生同样的事情,列表中最先出现的是唯一显示的路由器。此外,无论选择哪个路由器,都不会显示 api-auth/
和 docs/
url。有没有办法在不必创建我自己的自定义视图的情况下获得统一的 api 根目录?
这与 Django REST 框架没有任何关系,它的发生是因为 Django 如何处理重复的 urls。
您正在尝试让一个 url 由两个不同的视图处理:DRF 路由器索引和 djoser 根视图。 Django 只会显示第一个匹配它找到的搜索模式的视图,通常是 url 模式中包含的前 urls。
Django REST framework 也不会检测多个可用的路由器并将它们组合在同一页面上,这听起来像是您希望看到的。即使可以,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 框架不可能自动将这些视图组合在一起。您将需要创建自己的客户视图来处理此问题。