mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-02 19:40:13 +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 import status
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.request import clone_request
|
from rest_framework.request import clone_request
|
||||||
|
from rest_framework.templatetags.rest_framework import replace_query_param
|
||||||
|
|
||||||
import warnings
|
import warnings
|
||||||
|
|
||||||
|
|
||||||
|
@ -187,3 +189,31 @@ class DestroyModelMixin(object):
|
||||||
obj = self.get_object()
|
obj = self.get_object()
|
||||||
obj.delete()
|
obj.delete()
|
||||||
return Response(status=status.HTTP_204_NO_CONTENT)
|
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