mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-02 11:30:12 +03:00
Merge 0ee01d6397
into f18158358d
This commit is contained in:
commit
e6a24cd69e
|
@ -10,6 +10,8 @@ from django.http import Http404
|
|||
from rest_framework import status
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.request import clone_request
|
||||
from rest_framework.templatetags.rest_framework import replace_query_param
|
||||
|
||||
import warnings
|
||||
|
||||
|
||||
|
@ -187,3 +189,31 @@ class DestroyModelMixin(object):
|
|||
obj = self.get_object()
|
||||
obj.delete()
|
||||
return Response(status=status.HTTP_204_NO_CONTENT)
|
||||
|
||||
|
||||
class HeadersPaginationMixin(object):
|
||||
def paginate_queryset(self, queryset, page_size=None):
|
||||
page = super().paginate_queryset(queryset=queryset, page_size=page_size)
|
||||
|
||||
if page is None:
|
||||
return page
|
||||
|
||||
self.headers["X-Pagination-Count"] = page.paginator.count
|
||||
self.headers["X-Paginated"] = "true"
|
||||
|
||||
if page.has_next():
|
||||
num = page.next_page_number()
|
||||
url = self.request.build_absolute_uri()
|
||||
url = replace_query_param(url, "page", num)
|
||||
self.headers["X-Pagination-Next"] = url
|
||||
|
||||
if page.has_previous():
|
||||
num = page.previous_page_number()
|
||||
url = self.request.build_absolute_uri()
|
||||
url = replace_query_param(url, "page", num)
|
||||
self.headers["X-Pagination-Prev"] = url
|
||||
|
||||
return page
|
||||
|
||||
def get_pagination_serializer(self, page):
|
||||
return self.get_serializer(page.object_list, many=True)
|
||||
|
|
Loading…
Reference in New Issue
Block a user