Allow DefaultRouter's api-root to be mounted on a url that includes

captured parameters
This commit is contained in:
Bart Vandendriessche 2014-02-11 14:28:07 +01:00
parent 024baf1765
commit aa8908fef2
2 changed files with 23 additions and 3 deletions

View File

@ -254,10 +254,10 @@ class DefaultRouter(SimpleRouter):
class APIRoot(views.APIView):
_ignore_model_permissions = True
def get(self, request, format=None):
def get(self, request, format=None, *args, **kwargs):
ret = {}
for key, url_name in api_root_dict.items():
ret[key] = reverse(url_name, request=request, format=format)
ret[key] = reverse(url_name, request=request, format=format, kwargs=kwargs)
return Response(ret)
return APIRoot.as_view()

View File

@ -2,7 +2,7 @@ from __future__ import unicode_literals
from django.db import models
from django.test import TestCase
from django.core.exceptions import ImproperlyConfigured
from rest_framework import serializers, viewsets, permissions
from rest_framework import serializers, viewsets, permissions, status
from rest_framework.compat import include, patterns, url
from rest_framework.decorators import link, action
from rest_framework.response import Response
@ -164,6 +164,26 @@ class TestNameableRoot(TestCase):
expected = 'nameable-root'
self.assertEqual(expected, self.urls[0].name)
class TestScopedRoot(TestCase):
class NoteViewSet(viewsets.ModelViewSet):
model = RouterTestModel
router = DefaultRouter()
router.register(r'notes', NoteViewSet)
urls = patterns(
'',
url(r'^(?P<scope>\w[\w-]*)/', include(router.urls)),
)
def setUp(self):
self.view = self.router.get_api_root_view()
def test_api_root_is_accessible(self):
request = factory.get('/scope/') # get the api-root
response = self.view(request, scope='scope')
self.assertEqual(response.status_code, status.HTTP_200_OK)
class TestActionKeywordArgs(TestCase):
"""