From 586391f19d1b387e1525a9a16729854c65f7d8e6 Mon Sep 17 00:00:00 2001 From: Josh Washburne Date: Thu, 19 Apr 2018 12:08:29 -0400 Subject: [PATCH] Add custom pagination to return total number of pages. --- savepointradio/api/pagination.py | 20 +++++++++++++++++++ .../savepointradio/settings/base.py | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 savepointradio/api/pagination.py diff --git a/savepointradio/api/pagination.py b/savepointradio/api/pagination.py new file mode 100644 index 0000000..21b6db1 --- /dev/null +++ b/savepointradio/api/pagination.py @@ -0,0 +1,20 @@ +from rest_framework import pagination +from rest_framework.response import Response + + +class TotalPagesPagination(pagination.PageNumberPagination): + ''' + Custom pagination class to add the total numer of pages for the results. + + (Thanks to https://stackoverflow.com/questions/40985248/) + ''' + def get_paginated_response(self, data): + return Response({ + 'links': { + 'next': self.get_next_link(), + 'previous': self.get_previous_link() + }, + 'count': self.page.paginator.count, + 'total_pages': self.page.paginator.num_pages, + 'results': data + }) diff --git a/savepointradio/savepointradio/settings/base.py b/savepointradio/savepointradio/settings/base.py index 3888e36..a6d91d7 100644 --- a/savepointradio/savepointradio/settings/base.py +++ b/savepointradio/savepointradio/settings/base.py @@ -102,7 +102,7 @@ REST_FRAMEWORK = { 'rest_framework.authentication.SessionAuthentication', 'rest_framework.authentication.TokenAuthentication', ), - 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', + 'DEFAULT_PAGINATION_CLASS': 'api.pagination.TotalPagesPagination', 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated', ),