From e981ddc654a2706d09b95d5262d7a13529d7b566 Mon Sep 17 00:00:00 2001 From: Paul Bailey Date: Thu, 6 Oct 2016 16:13:33 -0400 Subject: [PATCH] added paginated_response for functional views --- rest_framework/generics.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/rest_framework/generics.py b/rest_framework/generics.py index 3ee569109..6c7167b7a 100644 --- a/rest_framework/generics.py +++ b/rest_framework/generics.py @@ -8,6 +8,7 @@ from django.http import Http404 from django.shortcuts import get_object_or_404 as _get_object_or_404 from rest_framework import mixins, views +from rest_framework.response import Response from rest_framework.settings import api_settings @@ -290,3 +291,19 @@ class RetrieveUpdateDestroyAPIView(mixins.RetrieveModelMixin, def delete(self, request, *args, **kwargs): return self.destroy(request, *args, **kwargs) + +def paginated_response(request, queryset, serializer_class, pagination_class=None, **kwargs): + if pagination_class is None: + pagination_class = api_settings.DEFAULT_PAGINATION_CLASS + + paginator = pagination_class() + for attr, value in kwargs.items(): + setattr(paginator, attr, value) + + page = paginator.paginate_queryset(queryset, request) + if page is None: + serializer = serializer_class(queryset, many=True) + return Response(serializer.data) + + serializer = serializer_class(page, many=True) + return paginator.get_paginated_response(serializer.data)