2016-12-05 12 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

あなたがあなた自身のページネーションのシリアライザを作成することができます:あなたが追加settings.pyであなたの構成では

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 
     }) 

YourPaginationクラスをデフォルトのページ区切りクラスとして使用します。

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

参考文献:

+0

の総ページ数はページネータの属性として利用できるのですか? – 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

関連する問題