diff options
Diffstat (limited to 'djangorestframework')
| -rw-r--r-- | djangorestframework/compat.py | 8 | ||||
| -rw-r--r-- | djangorestframework/resources.py | 1 | ||||
| -rw-r--r-- | djangorestframework/reverse.py | 23 | ||||
| -rw-r--r-- | djangorestframework/tests/reverse.py | 23 |
4 files changed, 46 insertions, 9 deletions
diff --git a/djangorestframework/compat.py b/djangorestframework/compat.py index 7690316c..b818b446 100644 --- a/djangorestframework/compat.py +++ b/djangorestframework/compat.py @@ -457,3 +457,11 @@ except ImportError: # python < 2.7 return decorator unittest.skip = skip + +# reverse_lazy (Django 1.4 onwards) +try: + from django.core.urlresolvers import reverse_lazy +except: + from django.core.urlresolvers import reverse + from django.utils.functional import lazy + reverse_lazy = lazy(reverse, str) diff --git a/djangorestframework/resources.py b/djangorestframework/resources.py index eadc11d0..8ee49f82 100644 --- a/djangorestframework/resources.py +++ b/djangorestframework/resources.py @@ -3,6 +3,7 @@ from django.core.urlresolvers import get_urlconf, get_resolver, NoReverseMatch from django.db import models from djangorestframework.response import ImmediateResponse +from djangorestframework.reverse import reverse from djangorestframework.serializer import Serializer, _SkipField from djangorestframework.utils import as_tuple, reverse diff --git a/djangorestframework/reverse.py b/djangorestframework/reverse.py new file mode 100644 index 00000000..ad06f966 --- /dev/null +++ b/djangorestframework/reverse.py @@ -0,0 +1,23 @@ +""" +Provide reverse functions that return fully qualified URLs +""" +from django.core.urlresolvers import reverse as django_reverse +from djangorestframework.compat import reverse_lazy as django_reverse_lazy + + +def reverse(viewname, request, *args, **kwargs): + """ + Do the same as `django.core.urlresolvers.reverse` but using + *request* to build a fully qualified URL. + """ + url = django_reverse(viewname, *args, **kwargs) + return request.build_absolute_uri(url) + + +def reverse_lazy(viewname, request, *args, **kwargs): + """ + Do the same as `django.core.urlresolvers.reverse_lazy` but using + *request* to build a fully qualified URL. + """ + url = django_reverse_lazy(viewname, *args, **kwargs) + return request.build_absolute_uri(url) diff --git a/djangorestframework/tests/reverse.py b/djangorestframework/tests/reverse.py index 05c21faa..c2388d62 100644 --- a/djangorestframework/tests/reverse.py +++ b/djangorestframework/tests/reverse.py @@ -2,28 +2,33 @@ from django.conf.urls.defaults import patterns, url from django.test import TestCase from django.utils import simplejson as json -from djangorestframework.utils import reverse +from djangorestframework.renderers import JSONRenderer +from djangorestframework.reverse import reverse from djangorestframework.views import View from djangorestframework.response import Response -class MockView(View): - """Mock resource which simply returns a URL, so that we can ensure that reversed URLs are fully qualified""" - permissions = () +class MyView(View): + """ + Mock resource which simply returns a URL, so that we can ensure + that reversed URLs are fully qualified. + """ + renderers = (JSONRenderer, ) def get(self, request): return Response(reverse('another', request)) urlpatterns = patterns('', - url(r'^$', MockView.as_view()), - url(r'^another$', MockView.as_view(), name='another'), + url(r'^myview$', MyView.as_view(), name='myview'), ) class ReverseTests(TestCase): - """Tests for """ + """ + Tests for fully qualifed URLs when using `reverse`. + """ urls = 'djangorestframework.tests.reverse' def test_reversed_urls_are_fully_qualified(self): - response = self.client.get('/') - self.assertEqual(json.loads(response.content), 'http://testserver/another') + response = self.client.get('/myview') + self.assertEqual(json.loads(response.content), 'http://testserver/myview') |
