diff --git a/rest_framework/versioning.py b/rest_framework/versioning.py index e27c7b316..e663f435e 100644 --- a/rest_framework/versioning.py +++ b/rest_framework/versioning.py @@ -112,13 +112,13 @@ class NamespaceVersioning(BaseVersioning): Host: example.com Accept: application/json """ - invalid_version_message = _('Invalid version in URL path.') + invalid_version_message = _('Invalid version in namespace.') def determine_version(self, request, *args, **kwargs): resolver_match = getattr(request, 'resolver_match', None) if (resolver_match is None or not resolver_match.namespace): return self.default_version - version = resolver_match.namespace + version = resolver_match.namespace.split(':')[0] if not self.is_allowed_version(version): raise exceptions.NotFound(self.invalid_version_message) return version diff --git a/tests/test_versioning.py b/tests/test_versioning.py index 4029e0e43..b798be385 100644 --- a/tests/test_versioning.py +++ b/tests/test_versioning.py @@ -271,8 +271,12 @@ class TestHyperlinkedRelatedField(UsingURLPatterns, APITestCase): class TestNamespaceVersioningHyperlinkedRelatedFieldScheme(UsingURLPatterns, APITestCase): + nested = [ + url(r'^namespaced/(?P\d+)/$', dummy_pk_view, name='nested'), + ] included = [ url(r'^namespaced/(?P\d+)/$', dummy_pk_view, name='namespaced'), + url(r'^nested/', include(nested, namespace='nested-namespace')) ] urlpatterns = [ @@ -296,6 +300,10 @@ class TestNamespaceVersioningHyperlinkedRelatedFieldScheme(UsingURLPatterns, API field = self._create_field('namespaced', 'v1') assert field.to_representation(PKOnlyObject(3)) == 'http://testserver/v1/namespaced/3/' + def test_api_url_is_properly_reversed_with_nested(self): + field = self._create_field('nested', 'v1:nested-namespace') + assert field.to_representation(PKOnlyObject(3)) == 'http://testserver/v1/nested/namespaced/3/' + def test_api_url_is_properly_reversed_with_v2(self): field = self._create_field('namespaced', 'v2') assert field.to_representation(PKOnlyObject(5)) == 'http://testserver/v2/namespaced/5/'