diff options
| author | Tom Christie | 2012-02-21 06:09:30 -0800 |
|---|---|---|
| committer | Tom Christie | 2012-02-21 06:09:30 -0800 |
| commit | 49ebaf106d4c4357f51f6b2bbe533512340ea113 (patch) | |
| tree | ddb6cb637899a327253bffc2888e376eeab4e9f1 /djangorestframework | |
| parent | 5a5f24f263c218f4f04a6ea54bfc48a2794e152b (diff) | |
| parent | f17f3886f42c2068e6e8a41c6e5fe6bfe1408add (diff) | |
| download | django-rest-framework-49ebaf106d4c4357f51f6b2bbe533512340ea113.tar.bz2 | |
Merge pull request #175 from izquierdo/custom_reverse
Custom reverse() and drop set_script_prefix
Diffstat (limited to 'djangorestframework')
| -rw-r--r-- | djangorestframework/resources.py | 6 | ||||
| -rw-r--r-- | djangorestframework/tests/reverse.py | 4 | ||||
| -rw-r--r-- | djangorestframework/utils/__init__.py | 21 | ||||
| -rw-r--r-- | djangorestframework/views.py | 10 |
4 files changed, 26 insertions, 15 deletions
diff --git a/djangorestframework/resources.py b/djangorestframework/resources.py index cc338cc0..5e126def 100644 --- a/djangorestframework/resources.py +++ b/djangorestframework/resources.py @@ -1,10 +1,10 @@ from django import forms -from django.core.urlresolvers import reverse, get_urlconf, get_resolver, NoReverseMatch +from django.core.urlresolvers import get_urlconf, get_resolver, NoReverseMatch from django.db import models from djangorestframework.response import ErrorResponse from djangorestframework.serializer import Serializer, _SkipField -from djangorestframework.utils import as_tuple +from djangorestframework.utils import as_tuple, reverse class BaseResource(Serializer): @@ -354,7 +354,7 @@ class ModelResource(FormResource): instance_attrs[param] = attr try: - return reverse(self.view_callable[0], kwargs=instance_attrs) + return reverse(self.view_callable[0], self.view.request, kwargs=instance_attrs) except NoReverseMatch: pass raise _SkipField diff --git a/djangorestframework/tests/reverse.py b/djangorestframework/tests/reverse.py index 2d1ca79e..3ac04d8c 100644 --- a/djangorestframework/tests/reverse.py +++ b/djangorestframework/tests/reverse.py @@ -1,8 +1,8 @@ from django.conf.urls.defaults import patterns, url -from django.core.urlresolvers import reverse from django.test import TestCase from django.utils import simplejson as json +from djangorestframework.utils import reverse from djangorestframework.views import View @@ -11,7 +11,7 @@ class MockView(View): permissions = () def get(self, request): - return reverse('another') + return reverse('another', request) urlpatterns = patterns('', url(r'^$', MockView.as_view()), diff --git a/djangorestframework/utils/__init__.py b/djangorestframework/utils/__init__.py index 634d0d68..fc8bae92 100644 --- a/djangorestframework/utils/__init__.py +++ b/djangorestframework/utils/__init__.py @@ -1,6 +1,7 @@ +import django from django.utils.encoding import smart_unicode from django.utils.xmlutils import SimplerXMLGenerator -from django.core.urlresolvers import resolve +from django.core.urlresolvers import resolve, reverse as django_reverse from django.conf import settings from djangorestframework.compat import StringIO @@ -173,3 +174,21 @@ class XMLRenderer(): def dict2xml(input): return XMLRenderer().dict2xml(input) + + +def reverse(viewname, request, *args, **kwargs): + """ + Do the same as :py:func:`django.core.urlresolvers.reverse` but using + *request* to build a fully qualified URL. + """ + return request.build_absolute_uri(django_reverse(viewname, *args, **kwargs)) + +if django.VERSION >= (1, 4): + from django.core.urlresolvers import reverse_lazy as django_reverse_lazy + + def reverse_lazy(viewname, request, *args, **kwargs): + """ + Do the same as :py:func:`django.core.urlresolvers.reverse_lazy` but using + *request* to build a fully qualified URL. + """ + return request.build_absolute_uri(django_reverse_lazy(viewname, *args, **kwargs)) diff --git a/djangorestframework/views.py b/djangorestframework/views.py index 32d2437c..3e8bf356 100644 --- a/djangorestframework/views.py +++ b/djangorestframework/views.py @@ -181,20 +181,12 @@ class View(ResourceMixin, RequestMixin, ResponseMixin, AuthMixin, DjangoView): Required if you want to do things like set `request.upload_handlers` before the authentication and dispatch handling is run. """ - # Calls to 'reverse' will not be fully qualified unless we set the - # scheme/host/port here. - self.orig_prefix = get_script_prefix() - if not (self.orig_prefix.startswith('http:') or self.orig_prefix.startswith('https:')): - prefix = '%s://%s' % (request.is_secure() and 'https' or 'http', request.get_host()) - set_script_prefix(prefix + self.orig_prefix) + return request def final(self, request, response, *args, **kargs): """ Hook for any code that needs to run after everything else in the view. """ - # Restore script_prefix. - set_script_prefix(self.orig_prefix) - # Always add these headers. response.headers['Allow'] = ', '.join(self.allowed_methods) # sample to allow caching using Vary http header |
