added support for absolute/relative url switching

This commit is contained in:
Stephan Groß 2012-12-12 13:43:04 +01:00
parent 497da7fc69
commit 1fb988b533
5 changed files with 26 additions and 4 deletions

View File

@ -166,4 +166,8 @@ Default: `'format'`
Default: `'format'`
## USE_ABSOLUTE_URLS
Default: `True`
[cite]: http://www.python.org/dev/peps/pep-0020/

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -74,6 +74,8 @@ DEFAULTS = {
'URL_FORMAT_OVERRIDE': 'format',
'FORMAT_SUFFIX_KWARG': 'format',
'USE_ABSOLUTE_URLS': True,
}