def paginate_queryset(self, queryset, request, view=None): """ Paginate a queryset if required, either returning a page object, or `None` if pagination is not configured for this view. """ page_size = self.get_page_size(request) if not page_size: return None paginator = self.django_paginator_class(queryset, page_size) page_number = self.get_page_number(request, paginator) print(page_number) try: #这里是重点因为每次查询结果是固定数量,因此这里做了优化,所以这里要传1 self.page = paginator.page(1) #重新对页码赋值,要不页码永远默认为第一页,就不会实现跳转了 self.page.number = int(page_number) except InvalidPage as exc: msg = self.invalid_page_message.format( page_number=page_number, message=str(exc) ) raise NotFound(msg) if paginator.num_pages > 1 and self.template is not None: # The browsable API should display pagination controls. self.display_page_controls = True self.request = request return list(self.page)
def get_paginated_response(self, data, columns,count,limit): #重写分页返回,自己定义总页数,如果不重写返回数据错误 self.page.paginator.num_pages = int(count/limit) print(self.page.paginator.num_pages) return Response(OrderedDict([ ('count', count), ('next', self.get_next_link()), ('previous', self.get_previous_link()), ('results', data), ('columns', columns), ]))