mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-04 20:40:14 +03:00
Merge e5e1bd1ad9
into b40525d8e6
This commit is contained in:
commit
e946a6cdfb
|
@ -120,6 +120,29 @@ class GenericAPIView(views.APIView):
|
||||||
context = self.get_serializer_context()
|
context = self.get_serializer_context()
|
||||||
return pagination_serializer_class(instance=page, context=context)
|
return pagination_serializer_class(instance=page, context=context)
|
||||||
|
|
||||||
|
def parse_page_number(self):
|
||||||
|
"""
|
||||||
|
Parse request parameters and return a valid integer
|
||||||
|
page number.
|
||||||
|
|
||||||
|
Additionally it, parses "last" shortcut and returns -1
|
||||||
|
when it's received.
|
||||||
|
|
||||||
|
In case of invalid data received, ParseError is raised.
|
||||||
|
"""
|
||||||
|
|
||||||
|
page_kwarg = self.kwargs.get(self.page_kwarg)
|
||||||
|
page_query_param = self.request.QUERY_PARAMS.get(self.page_kwarg)
|
||||||
|
page = page_kwarg or page_query_param or 1
|
||||||
|
|
||||||
|
if page == "last":
|
||||||
|
page = -1
|
||||||
|
|
||||||
|
try:
|
||||||
|
return int(page)
|
||||||
|
except (TypeError, ValueError):
|
||||||
|
raise exceptions.ParseError(_("Page is not 'last', nor can it be converted to an int."))
|
||||||
|
|
||||||
def paginate_queryset(self, queryset, page_size=None):
|
def paginate_queryset(self, queryset, page_size=None):
|
||||||
"""
|
"""
|
||||||
Paginate a queryset if required, either returning a page object,
|
Paginate a queryset if required, either returning a page object,
|
||||||
|
@ -151,16 +174,11 @@ class GenericAPIView(views.APIView):
|
||||||
|
|
||||||
paginator = self.paginator_class(queryset, page_size,
|
paginator = self.paginator_class(queryset, page_size,
|
||||||
allow_empty_first_page=self.allow_empty)
|
allow_empty_first_page=self.allow_empty)
|
||||||
page_kwarg = self.kwargs.get(self.page_kwarg)
|
|
||||||
page_query_param = self.request.QUERY_PARAMS.get(self.page_kwarg)
|
page_number = self.parse_page_number()
|
||||||
page = page_kwarg or page_query_param or 1
|
if page_number == -1:
|
||||||
try:
|
page_number = paginator.num_pages
|
||||||
page_number = paginator.validate_number(page)
|
|
||||||
except InvalidPage:
|
|
||||||
if page == 'last':
|
|
||||||
page_number = paginator.num_pages
|
|
||||||
else:
|
|
||||||
raise Http404(_("Page is not 'last', nor can it be converted to an int."))
|
|
||||||
try:
|
try:
|
||||||
page = paginator.page(page_number)
|
page = paginator.page(page_number)
|
||||||
except InvalidPage as exc:
|
except InvalidPage as exc:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user