aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework
diff options
context:
space:
mode:
Diffstat (limited to 'rest_framework')
-rw-r--r--rest_framework/reverse.py9
-rw-r--r--rest_framework/versioning.py12
2 files changed, 9 insertions, 12 deletions
diff --git a/rest_framework/reverse.py b/rest_framework/reverse.py
index a251d99d..e6d3f563 100644
--- a/rest_framework/reverse.py
+++ b/rest_framework/reverse.py
@@ -3,6 +3,7 @@ Provide urlresolver functions that return fully qualified URLs or view names
"""
from __future__ import unicode_literals
from django.core.urlresolvers import reverse as django_reverse
+from django.core.urlresolvers import NoReverseMatch
from django.utils import six
from django.utils.functional import lazy
@@ -15,7 +16,13 @@ def reverse(viewname, args=None, kwargs=None, request=None, format=None, **extra
"""
scheme = getattr(request, 'versioning_scheme', None)
if scheme is not None:
- return scheme.reverse(viewname, args, kwargs, request, format, **extra)
+ try:
+ return scheme.reverse(viewname, args, kwargs, request, format, **extra)
+ except NoReverseMatch:
+ # In case the versioning scheme reversal fails, fallback to the
+ # default implementation
+ pass
+
return _reverse(viewname, args, kwargs, request, format, **extra)
diff --git a/rest_framework/versioning.py b/rest_framework/versioning.py
index 6f7952c0..51b886f3 100644
--- a/rest_framework/versioning.py
+++ b/rest_framework/versioning.py
@@ -1,7 +1,6 @@
# coding: utf-8
from __future__ import unicode_literals
from django.utils.translation import ugettext_lazy as _
-from django.core.urlresolvers import NoReverseMatch
from rest_framework import exceptions
from rest_framework.compat import unicode_http_header
from rest_framework.reverse import _reverse
@@ -123,16 +122,7 @@ class NamespaceVersioning(BaseVersioning):
def reverse(self, viewname, args=None, kwargs=None, request=None, format=None, **extra):
if request.version is not None:
- versioned_viewname = self.get_versioned_viewname(viewname, request)
- try:
- return super(NamespaceVersioning, self).reverse(
- versioned_viewname, args, kwargs, request, format, **extra
- )
- except NoReverseMatch:
- # If the versioned viewname lookup fails, fallback to the
- # default reversal, since it may be a non-API view
- pass
-
+ viewname = self.get_versioned_viewname(viewname, request)
return super(NamespaceVersioning, self).reverse(
viewname, args, kwargs, request, format, **extra
)