..

Write a CustomPaginator for django rest framework

Pagination is essential part for a REST api. Django rest framework provides an easy to way to add pagination to current API and a lot of useful built-in implementations. However, in order to work with a specified frontend component, a customized version is needed.

Customizing is easy in DRF, just extends a current one and override it get_paginated_response method. For example, the following one uses the page number pagination ,which means you can pass page=n in the URL to get the nth page. If pageSize is specified in request url, it will be used or the default page_size will be used

class CustomPagination(pagination.PageNumberPagination):
    page_size = 15
    page_size_query_param = 'pageSize'

    def get_paginated_response(self, data):
        return Response({
            'pagination': {
                'total': self.page.paginator.count,
                'pageSize': self.page.paginator.per_page,
                'current': self.page.number,
                },
                'list': data
            })

The response format is customized for antd’s table component.

There are two ways to tell your view to use it.

  • Specify pagination_class=CustomPagination in your views.
  • Configure it in settings. Doc is here.