2016-12-05 71 views
3

是否可以獲取API請求有多少頁可用?例如,這是我的迴應:django api框架獲取總頁數

{ 
    "count": 44, 
    "next": "http://localhost:8000/api/ingested_files/?page=2", 
    "previous": null, 
    "results": [ 
     { 
      "id": 44, 
.... 

我拉每頁20個元素,所以應該有,共有2頁,但目前它的設置,我可以得到下一個和以前的方式,但沒有上下文關於總頁數是多少。當然,我可以做一些數學計算,並獲得使用計數的可能頁數,但我想象這樣的東西會是框架本地的,不是嗎?

這是我的看法:

class IngestedFileView(generics.ListAPIView): 
    queryset = IngestedFile.objects.all() 
    serializer_class = IngestedFileSerializer 

這是我的串行:

class IngestedFileSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = IngestedFile 
     fields = ('id', 'filename', 'ingested_date', 'progress', 'processed', 'processed_date', 'error') 

回答

7

您可以創建自己的分頁串行:

from django.conf import settings 
from rest_framework import pagination 


class YourPagination(pagination.PageNumberPagination): 

    def get_paginated_response(self, data): 
     return Response({ 
      'links': { 
       'next': self.get_next_link(), 
       'previous': self.get_previous_link() 
      }, 
      'count': self.page.paginator.count, 
      'total_pages': self.page.paginator.num_pages, 
      'results': data 
     }) 

在您的配置中settings.py添加YourPagination類作爲默認分頁類。

REST_FRAMEWORK = { 
    'DEFAULT_PAGINATION_CLASS': 'my_project.apps.pagination.YourPagination', 
    'PAGE_SIZE': 20 
} 

參考文獻:

+0

的總頁數可作爲分頁程序的屬性?請參閱https://docs.djangoproject.com/en/1.10/topics/pagination/#django.core.paginator.Paginator.num_pages – mishbah

+0

是的,它是Django中的一個屬性,但不是正在使用的DRF。 –

+2

DRF正在使用django paginator?請參閱https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/pagination.py#L177。所以你應該可以通過'self.page.paginator.num_pages'訪問它? – mishbah