mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-23 22:49:50 +03:00
added "use_absolute_urls" option to serializer
This commit is contained in:
parent
1fb988b533
commit
5b351567d8
|
@ -1,5 +1,4 @@
|
|||
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
|
||||
|
@ -16,7 +15,7 @@ class NextPageField(serializers.Field):
|
|||
return None
|
||||
page = value.next_page_number()
|
||||
request = self.context.get('request')
|
||||
if api_settings.USE_ABSOLUTE_URLS:
|
||||
if self.parent.use_absolute_urls:
|
||||
assert request, "request is required for building absolute url"
|
||||
url = request.build_absolute_uri()
|
||||
else:
|
||||
|
@ -35,7 +34,7 @@ class PreviousPageField(serializers.Field):
|
|||
return None
|
||||
page = value.previous_page_number()
|
||||
request = self.context.get('request')
|
||||
if api_settings.USE_ABSOLUTE_URLS:
|
||||
if self.parent.use_absolute_urls:
|
||||
assert request, "request is required for building absolute url"
|
||||
url = request.build_absolute_uri()
|
||||
else:
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
"""
|
||||
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
|
||||
from rest_framework.settings import api_settings
|
||||
|
||||
|
||||
def reverse(viewname, args=None, kwargs=None, request=None, format=None, **extra):
|
||||
|
|
|
@ -16,6 +16,7 @@ from rest_framework.compat import get_concrete_model
|
|||
|
||||
|
||||
from rest_framework.fields import *
|
||||
from rest_framework.settings import api_settings
|
||||
|
||||
|
||||
class DictWithMetadata(dict):
|
||||
|
@ -91,6 +92,7 @@ class SerializerOptions(object):
|
|||
self.depth = getattr(meta, 'depth', 0)
|
||||
self.fields = getattr(meta, 'fields', ())
|
||||
self.exclude = getattr(meta, 'exclude', ())
|
||||
self.use_absolute_urls = getattr(meta, 'use_absolute_urls', api_settings.USE_ABSOLUTE_URLS)
|
||||
|
||||
|
||||
class BaseSerializer(Field):
|
||||
|
@ -101,12 +103,13 @@ class BaseSerializer(Field):
|
|||
_dict_class = SortedDictWithMetadata # Set to unsorted dict for backwards compatibility with unsorted implementations.
|
||||
|
||||
def __init__(self, instance=None, data=None, files=None,
|
||||
context=None, partial=False, **kwargs):
|
||||
context=None, partial=False, use_absolute_urls=None, **kwargs):
|
||||
super(BaseSerializer, self).__init__(**kwargs)
|
||||
self.opts = self._options_class(self.Meta)
|
||||
self.parent = None
|
||||
self.root = None
|
||||
self.partial = partial
|
||||
self.use_absolute_urls = use_absolute_urls if use_absolute_urls is not None else self.opts.use_absolute_urls
|
||||
|
||||
self.context = context or {}
|
||||
|
||||
|
|
|
@ -160,13 +160,13 @@ class UnitTestPagination(TestCase):
|
|||
self.last_page = paginator.page(3)
|
||||
|
||||
def test_native_pagination(self):
|
||||
serializer = pagination.PaginationSerializer(self.first_page)
|
||||
serializer = pagination.PaginationSerializer(self.first_page, use_absolute_urls=False)
|
||||
self.assertEquals(serializer.data['count'], 26)
|
||||
self.assertEquals(serializer.data['next'], '?page=2')
|
||||
self.assertEquals(serializer.data['previous'], None)
|
||||
self.assertEquals(serializer.data['results'], self.objects[:10])
|
||||
|
||||
serializer = pagination.PaginationSerializer(self.last_page)
|
||||
serializer = pagination.PaginationSerializer(self.last_page, use_absolute_urls=False)
|
||||
self.assertEquals(serializer.data['count'], 26)
|
||||
self.assertEquals(serializer.data['next'], None)
|
||||
self.assertEquals(serializer.data['previous'], '?page=2')
|
||||
|
|
Loading…
Reference in New Issue
Block a user