diff options
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) |
