Files
enhanced-drf-jsonapi/enhanced_drf_jsonapi/pagination.py
T

36 lines
1.3 KiB
Python

"""Pagination adapters for clients built with ngx-jsonapi."""
from rest_framework.response import Response
from rest_framework_json_api.pagination import JsonApiPageNumberPagination
class NgxJsonApiPageNumberPagination(JsonApiPageNumberPagination):
"""Expose page-number metadata in the shape expected by ngx-jsonapi."""
def get_paginated_response(self, data):
next_page = None
previous_page = None
if self.page.has_next():
next_page = self.page.next_page_number()
if self.page.has_previous():
previous_page = self.page.previous_page_number()
return Response(
{
"results": data,
"meta": {
"page": self.page.number,
"pages": self.page.paginator.num_pages,
"total_resources": self.page.paginator.count,
"resources_per_page": self.page.paginator.per_page,
},
"links": {
"first": self.build_link(1),
"last": self.build_link(self.page.paginator.num_pages),
"next": self.build_link(next_page),
"prev": self.build_link(previous_page),
},
}
)