DRFのPageNumberPaginationを使ってると、
今のページ数(page
)やページあたりの数(per_page
)とかもほしくなる。
ドキュメントとかを見てると、カスタマイズで追加できるよ!と書いてあったので、
いろいろ試してみたときの備忘録。
・Custom pagination styles
こんな感じ
DRFのPaginationの中で、DjangoPaginatorが使われていて、
self.page
には、Page classが入っているので、
そこからいろいろ取得して返せばOK。
# app/pagenation.py from rest_framework import pagination from rest_framework.response import Response class CustomPageNumberPagination(pagination.PageNumberPagination): def get_paginated_response(self, data): return Response({ 'count': self.page.paginator.count, 'page': self.page.number, 'has_next': self.page.has_next(), 'has_previous': self.page.has_previous(), 'total_pages': self.page.paginator.num_pages, 'per_page': self.page_size, 'results': data })
カスタムしたクラスを有効化する
settings.py
の設定で、CustomPageNumberPagination
を利用するよう指定。
# settings.py REST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': 'app.pagination.CustomPageNumberPagination', # ...略 }
以上!!