django 分頁效果實現(djangorestframework內建以及django內建方法)
阿新 • • 發佈:2019-01-31
restframework的分頁需要再setting 中新增一個
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.BasicAuthentication',
),
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
'PAGE_SIZE': 10
}
class UserInfoPage(generics.ListAPIView) :
queryset = UserInfo.objects.all()
serializer_class = UserInfoSerializer
def get(self, request, *args, **kwargs):
pageObject = UserInfo.objects.all()
page = self.paginate_queryset(pageObject)
_total = self._paginator.count
if page is not None:
serializer = self.get_serializer(page, many=True )
_list = serializer.data
return_dict = {
'total': _total,
'limit': 10,
'list': _list
}
return Response(return_dict, status=status.HTTP_200_OK)
返回的效果圖
下面是我自己寫的一個分頁方法 由於資料一多,返回json太費時間,就改成了上面的那種方式
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
def page_info(info, pageSize=10, pageNo=1):
# info格式 為 資料序列化後的json格式
p = Paginator(info, pageSize)
try:
contract = p.page(pageNo).object_list
except PageNotAnInteger:
contract = p.page(1).object_list
except EmptyPage:
contract = []
something = {
'pageNo': pageNo,
'pageSize': pageSize,
'list': contract,
'total': p.count,
}
return something