在可浏览的api_root中混合View和ViewSet

dan*_*ast 12 python django django-rest-framework

我有一个可浏览的API:

restaurant_router = DefaultRouter()
restaurant_router.register(r'rooms', RoomsViewSet)
restaurant_router.register(r'printers', PrintersViewSet)
restaurant_router.register(r'shifts', ShiftsViewSet)

urlpatterns = patterns('',
    url(r'^$', api_root),
    url(r'^restaurant/$',
        RestaurantView.as_view(),
        name='api_restaurants_restaurant'),
    url(r'^restaurant/', include(restaurant_router.urls)),
)
Run Code Online (Sandbox Code Playgroud)

api_root我可以链接到命名路线:

@api_view(('GET',))
def api_root(request, format=None):
    return Response({
        'restaurant': reverse('api_restaurants_restaurant', request=request, format=format),
    })
Run Code Online (Sandbox Code Playgroud)

或者我可以使用由生成的可浏览API DefaultRouter,如文档中所述:

我们正在使用的DefaultRouter类也会自动为我们创建API根视图,因此我们现在可以从views模块中删除api_root方法.

如果我想混合ViewSets和普通视图,并在同一个API根目录中显示所有内容,该怎么办?该DefaultRouter只列出ViewSet它控制秒.

Jkk*_*nah -1

看起来没有一个简单的方法可以使用 DefaultRouter 来做到这一点,您必须构建自己的路由器。如果有任何安慰的话,DefaultRouter 生成 APIRoot 视图的逻辑相当简单,您可能可以轻松地基于 DefaultRouter 类推出您自己的类似路由器(例如,修改 ApiRoot 类实现以获取要包含的其他 URL,您可以在任何有多种方式,例如将它们传递到路由器的构造函数中):

https://github.com/tomchristie/django-rest-framework/blob/86470b7813d891890241149928d4679a3d2c92f6/rest_framework/routers.py#L263