36 lines
1.3 KiB
Python
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),
|
|
},
|
|
}
|
|
)
|