mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-04 12:30:11 +03:00
Allow DefaultRouter's api-root to be mounted on a url that includes
captured parameters
This commit is contained in:
parent
024baf1765
commit
aa8908fef2
|
@ -254,10 +254,10 @@ class DefaultRouter(SimpleRouter):
|
||||||
class APIRoot(views.APIView):
|
class APIRoot(views.APIView):
|
||||||
_ignore_model_permissions = True
|
_ignore_model_permissions = True
|
||||||
|
|
||||||
def get(self, request, format=None):
|
def get(self, request, format=None, *args, **kwargs):
|
||||||
ret = {}
|
ret = {}
|
||||||
for key, url_name in api_root_dict.items():
|
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 Response(ret)
|
||||||
|
|
||||||
return APIRoot.as_view()
|
return APIRoot.as_view()
|
||||||
|
|
|
@ -2,7 +2,7 @@ from __future__ import unicode_literals
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.core.exceptions import ImproperlyConfigured
|
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.compat import include, patterns, url
|
||||||
from rest_framework.decorators import link, action
|
from rest_framework.decorators import link, action
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
@ -164,6 +164,26 @@ class TestNameableRoot(TestCase):
|
||||||
expected = 'nameable-root'
|
expected = 'nameable-root'
|
||||||
self.assertEqual(expected, self.urls[0].name)
|
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):
|
class TestActionKeywordArgs(TestCase):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue
Block a user