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中调用一下就可以了,这样就可以实现分页,第一页,及最后一页了。