diff options
| author | Tom Christie | 2012-09-30 17:31:28 +0100 | 
|---|---|---|
| committer | Tom Christie | 2012-09-30 17:31:28 +0100 | 
| commit | 6fa589fefd48d98e4f0a11548b6c3e5ced58e31e (patch) | |
| tree | a5d1dd75ce6d5c5be7bf81b386a29c13235d33ff /rest_framework/pagination.py | |
| parent | 43d3634e892e303ca377265d3176e8313f19563f (diff) | |
| download | django-rest-framework-6fa589fefd48d98e4f0a11548b6c3e5ced58e31e.tar.bz2 | |
Pagination support
Diffstat (limited to 'rest_framework/pagination.py')
| -rw-r--r-- | rest_framework/pagination.py | 34 | 
1 files changed, 34 insertions, 0 deletions
| diff --git a/rest_framework/pagination.py b/rest_framework/pagination.py new file mode 100644 index 00000000..398e6f3d --- /dev/null +++ b/rest_framework/pagination.py @@ -0,0 +1,34 @@ +from rest_framework import serializers + +# TODO: Support URLconf kwarg-style paging + + +class NextPageField(serializers.Field): +    def to_native(self, value): +        if not value.has_next(): +            return None +        page = value.next_page_number() +        request = self.context['request'] +        return request.build_absolute_uri('?page=%d' % page) + + +class PreviousPageField(serializers.Field): +    def to_native(self, value): +        if not value.has_previous(): +            return None +        page = value.previous_page_number() +        request = self.context['request'] +        return request.build_absolute_uri('?page=%d' % page) + + +class PaginationSerializer(serializers.Serializer): +    count = serializers.Field(source='paginator.count') +    next = NextPageField(source='*') +    previous = PreviousPageField(source='*') + +    def to_native(self, obj): +        """ +        Prevent default behaviour of iterating over elements, and serializing +        each in turn. +        """ +        return self.convert_object(obj) | 
