From 1fb988b533b2da7aab6c214b0915e672a24e7009 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20Gro=C3=9F?= Date: Wed, 12 Dec 2012 13:43:04 +0100 Subject: [PATCH] added support for absolute/relative url switching --- docs/api-guide/settings.md | 4 ++++ docs/topics/release-notes.md | 5 +++++ rest_framework/pagination.py | 13 +++++++++++-- rest_framework/reverse.py | 6 ++++-- rest_framework/settings.py | 2 ++ 5 files changed, 26 insertions(+), 4 deletions(-) diff --git a/docs/api-guide/settings.md b/docs/api-guide/settings.md index 7884d096b..84fef1cf9 100644 --- a/docs/api-guide/settings.md +++ b/docs/api-guide/settings.md @@ -166,4 +166,8 @@ Default: `'format'` Default: `'format'` +## USE_ABSOLUTE_URLS + +Default: `True` + [cite]: http://www.python.org/dev/peps/pep-0020/ diff --git a/docs/topics/release-notes.md b/docs/topics/release-notes.md index 4f83cfd8f..c6715df6d 100644 --- a/docs/topics/release-notes.md +++ b/docs/topics/release-notes.md @@ -4,6 +4,11 @@ > > — Eric S. Raymond, [The Cathedral and the Bazaar][cite]. +## Master + +* Added support for absolute/relative url switching +* Bugfix: Fix absolute/relative url mix + ## 2.1.9 **Date**: 11th Dec 2012 diff --git a/rest_framework/pagination.py b/rest_framework/pagination.py index d241ade7c..4e4831390 100644 --- a/rest_framework/pagination.py +++ b/rest_framework/pagination.py @@ -1,4 +1,5 @@ from rest_framework import serializers +from rest_framework.settings import api_settings from rest_framework.templatetags.rest_framework import replace_query_param # TODO: Support URLconf kwarg-style paging @@ -15,7 +16,11 @@ class NextPageField(serializers.Field): return None page = value.next_page_number() request = self.context.get('request') - url = request and request.build_absolute_uri() or '' + if api_settings.USE_ABSOLUTE_URLS: + assert request, "request is required for building absolute url" + url = request.build_absolute_uri() + else: + url = request and request.get_full_path() or '' return replace_query_param(url, self.page_field, page) @@ -30,7 +35,11 @@ class PreviousPageField(serializers.Field): return None page = value.previous_page_number() request = self.context.get('request') - url = request and request.build_absolute_uri() or '' + if api_settings.USE_ABSOLUTE_URLS: + assert request, "request is required for building absolute url" + url = request.build_absolute_uri() + else: + url = request and request.get_full_path() or '' return replace_query_param(url, self.page_field, page) diff --git a/rest_framework/reverse.py b/rest_framework/reverse.py index c9db02f06..33a8b5eba 100644 --- a/rest_framework/reverse.py +++ b/rest_framework/reverse.py @@ -1,6 +1,7 @@ """ Provide reverse functions that return fully qualified URLs """ +from rest_framework.settings import api_settings from django.core.urlresolvers import reverse as django_reverse from django.utils.functional import lazy @@ -14,8 +15,9 @@ def reverse(viewname, args=None, kwargs=None, request=None, format=None, **extra kwargs = kwargs or {} kwargs['format'] = format url = django_reverse(viewname, args=args, kwargs=kwargs, **extra) - if request: - return request.build_absolute_uri(url) + if api_settings.USE_ABSOLUTE_URLS: + assert request, "request is required for building absolute url" + url = request.build_absolute_uri(url) return url diff --git a/rest_framework/settings.py b/rest_framework/settings.py index ee24a4ad9..c65ee998b 100644 --- a/rest_framework/settings.py +++ b/rest_framework/settings.py @@ -74,6 +74,8 @@ DEFAULTS = { 'URL_FORMAT_OVERRIDE': 'format', 'FORMAT_SUFFIX_KWARG': 'format', + + 'USE_ABSOLUTE_URLS': True, }