Hi,
I'd like to have Browsable API root for my API. There are two methods in the DRF docs:
1. use "api root" function like:
@api_view(('GET',))
def api_root(request, format=None):
return Response({
'registration': reverse('accounts-register', request=request, format=format),
'tickets': reverse('ticket-list', request=request, format=format)
})
2. Use DefaultRouter
router = routers.DefaultRouter()
router.register(r'tickets', TicketViewSet)
However I have some APIViews and some ViewSets in my API. Because I can set up a DefaultRouter for ViewSets, but can't register APIViews with it the api root view generated by router will be incomplete. Am I missing something here or registration of Views with router is just not possible?
At the moment I use something like:
@api_view(('GET',))
def api_root(request, format=None):
api_root_dict = {}
# parser router
list_name = router.routes[0].name
for prefix, viewset, basename in router.registry:
api_root_dict[prefix] = reverse(list_name.format(basename=basename),
request=request, format=format)
# add views
api_root_dict['registration'] = reverse('accounts-register',
request=request, format=format)
return Response(api_root_dict)
This is placed in the urls.py directly so `router` is the router from 2. above.
Is there any better solution?
Jakub