我目前正在Django restful框架中进行分页。我成功完成了分页。但我面临的问题是" JSON响应不包括我的查询中的总页面信息以及其他信息,如总记录等#34;。如何在回复中包含此信息。 我的view.py是
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
#######################View all mobiles
@api_view(['GET'])
def getAll_Mobiles(request):
try:
Mobile_all = Mobile.objects.all()
paginator = Paginator(Mobile_all, 10)
page = request.GET.get('page')
try:
users = paginator.page(page)
except PageNotAnInteger:
users = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999),
# deliver last page of results.
users = paginator.page(paginator.num_pages)
serializer_context = {'request': request}
serializer = Mobile_Serializer(users,many=True,context=serializer_context)
return Response(serializer.data)
except Mobile.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
我的API会在URL中更改页面时返回记录。但它没有给我回复信息。 有人可以告诉我如何将这些信息作为回应。我将非常感谢这种帮助。
答案 0 :(得分:0)
您应该能够在序列化程序中访问self.page.paginator.num_pages
的页数,这是分页器的属性。
答案 1 :(得分:0)
你可以看看DRF本身是如何done的。
在您的示例中,实现可能如下所示:
#users is a Page object returned from the django paginator class
#its not a list of users, it just act as a list of users when iterated
return Response({
'count': paginator.count,
'num_pages': paginator.num_pages,
'results': serializer.data
})
答案 2 :(得分:0)
一个简单的方法是:
to_represntation
另一种方法是在序列化程序中覆盖{{1}}方法......
答案 3 :(得分:0)
if serializer.data["hasPagination"]:
paginator = Paginator(result_serializer.data, settings.PAGE_SIZE)
page = request.GET.get('page', 1)
result = paginator.get_page(page)
return Response(data={
'results': result.object_list,
'total_records': paginator.count,
'total_pages': paginator.num_pages,
'page': result.number,
'has_next': result.has_next(),
'has_prev': result.has_previous()
}, status=status.HTTP_200_OK)