setting中:
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
# 'PAGE_SIZE': 10, # 這裡的每頁最多個數是優先于自定義的。我們自定義了,就不用這個了
}
serializers中寫
from rest_framework.pagination import PageNumberPagination
from rest_framework.utils.urls import remove_query_param, replace_query_param
class StandartResultsSetPagination(PageNumberPagination):
"""
配置分頁規則, 自定義第一頁,最後一頁
"""
page_size = 10 # 每頁顯示個數
page_size_query_param = 'page_size' # 預設
page_query_param = 'page' # 預設
max_page_size = 1000 # 最多頁數
def get_start_link(self):
"""
第一頁
"""
if not self.page.has_previous():
return None
page_number = 1
url = self.request.build_absolute_uri()
return replace_query_param(url, self.page_query_param, page_number)
def get_end_link(self):
"""
最後一頁
"""
if not self.page.has_next():
return None
url = self.request.build_absolute_uri()
page_number = self.page.paginator.num_pages
print(page_number)
return replace_query_param(url, self.page_query_param, page_number)
def get_paginated_response(self, data):
return Response(OrderedDict([
('count', self.page.paginator.count),
('start', self.get_start_link()),
('previous', self.get_previous_link()),
('next', self.get_next_link()),
('end', self.get_end_link()),
('results', data)
]))
使用方法:
views中:
class RegistrationView(viewsets.ModelViewSet):
"""
pass
"""
pagination_class = StandartResultsSetPagination # 使用自定義的分頁
在每個View中調用一下就可以了,這樣就可以實作分頁,第一頁,及最後一頁了。