django rest framework 显示 api root 中所有应用程序的 ViewSet 和经典端点

django rest framework display ViewSet and classic endpoints for all app in api root

有没有办法在 api 根中同时显示 ViewSet 端点(由路由器生成)和经典端点(在每个应用程序的 urls.py 中定义)?

app1 url.py:

router = DefaultRouter()
router.register(r'^foo', views.FooViewSet)

urlpatterns = [
    url(r'^', include(router.urls)),    
    url('bar/', views.BarListView.as_view(), name='bar-list'),
    url('baz/', views.BazListView.as_view(), name='baz-list'),
]

app2 url.py:

router = DefaultRouter()
router.register(r'^qux', views.QuxFooViewSet)

urlpatterns = [
    url(r'^', include(router.urls)),    
    url('quux/', views.QuuxListView.as_view(), name='quux-list'),
    url('corge/', views.CorgeListView.as_view(), name='corge-list'),
]

全球url.py:

urlpatterns = [
    url(r'^', include('app1.urls')),
    url(r'^', include('app2.urls')),
]

API-root:

HTTP 200 OK
  Allow: GET, OPTIONS
  Content-Type: application/json
  Vary: Accept

  {
    "foo": "http://localhost:8000/foo/",
    "bar": "http://localhost:8000/bar/"
    "baz": "http://localhost:8000/baz/"
    "qux": "http://localhost:8000/qux/"
    "quux": "http://localhost:8000/quux/"
    "corge": "http://localhost:8000/corge/"
}    

这是我想要得到的结果。但目前我只能显示路由器网址或经典网址,但不能同时显示两者。当我尝试显示多个路由器时,它只显示第一个(如 django 文档中所述)。有办法吗?

否,但您仍然可以使用模型或非模型视图集来代替 APIView。

from rest_framework import viewsets

class BarListView(viewsets.ViewSetMixin, <what you already had>):
    <your current code>

应该就可以了。 请注意,如果它是非模型视图,则需要将 base_name 添加到路由器的注册中。