Django REST Frameworkに再挑戦 その7 Pagination with Rest Framework
概要
Django REST Frameworkに再挑戦 その7 Pagination with Rest Framework
参考サイト
www.codingforentrepreneurs.com
Pagination with Rest Framework(ページ付)
- まずpaginationのclassを試しに、importする。api/views.py。
from rest_framework.pagination import ( LimitOffsetPagination, PageNumberPagination, ) ... class PostListAPIView(ListAPIView): ... pagination_class = LimitOffsetPagination#PageNumberPagination ...
- 上記のコードを追記して、
http://127.0.0.1:8000/api/posts/?limit=2
のように、limitを指定してアクセスすると、指定したら以下のように表示されるはず。
HTTP 200 OK Allow: GET, HEAD, OPTIONS Content-Type: application/json Vary: Accept { "count": 3, "next": "http://127.0.0.1:8000/api/posts/?limit=2&offset=2", "previous": null, "results": [ { "user": 2, "title": "my title", "slug": "my-title", "content": "de", "publish": "2017-01-16" }, { "user": 1, "title": "new title", "slug": "new-title", "content": "new item", "publish": "2017-01-13" } ] }
- custom paginationを作成する。まず、api/pagination.pyを作成する。ここでは、試しに、デフォルトが2で、表示のlimitが10のpagination classを作成する。公式サイトは以下を参照。
Pagination - Django REST framework
from rest_framework.pagination import ( LimitOffsetPagination, PageNumberPagination, ) class PostLimitOffsetPagination(LimitOffsetPagination): default = 2 max_limit = 10
- api/views.pyのコードの修正をする。
from .pagination import PostLimitOffsetPagination ... class PostListAPIView(ListAPIView): ... pagination_class = PostLimitOffsetPagination#PageNumberPagination ...
/api/posts/を開くと確かにpaginationできてる!!すげー!
次は、PostPageNumberPaginationを定義してみる。pagination.pyに追記する。
class PostPageNumberPagination(PageNumberPagination): page_size = 2
- api/views.pyに追記する。
... from .pagination import PostLimitOffsetPagination, PostPageNumberPagination ... class PostListAPIView(ListAPIView): ... pagination_class = PostPageNumberPagination#PageNumberPagination ...
- おー、表示された!PageNumberPaginationは、1ページあたりのマックスの要素数を定義して、LimitOffsetは、リミットを決めておいて、それを超えたら次のページを表示させるという感じなのかな。