2017-06-03 50 views
0

我目前正在研究Django restful框架中的分頁。我已成功完成分頁。但我面臨的問題是「JSON響應不包括我的查詢中的全部頁面信息以及其他信息,如總記錄等。」我如何在我的回覆中包含這些信息? 我view.py是如何在Django分頁的JSON響應中顯示總頁數?

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

你可以看看這是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 
}) 
+0

謝謝親愛的幫忙。它的工作現在。 – maadi

0

您應該能夠訪問序列化程序中self.page.paginator.num_pages的頁數,因爲它是分頁程序的一個屬性。

0

的簡單方法是:

# instead of returning serializer data instantly: 
# return Response(serializer.data) 
res = {'data': serializer.data, 'pages_count': paginator.num_pages()} 
return Response(res) 

另一種方法是在你的串行覆蓋to_represntation方法...

+0

它提供的錯誤,如「更新不是'res'的屬性」。 – maadi

+0

但我完成了下面的答案。感謝您的建議 – maadi

+0

@AmadudDin你是對的:) 這是我的錯誤,我編輯了我的答案進一步用途。 –