DRF 分页 3 种用法

好!我直接给你 DRF 分页最简单、最标准、能直接复制用的代码,一步到位!

DRF 分页 3 种用法(从最简单到全局配置)


1. 最简单用法:给单个视图加分页

直接在你的 ViewSet 里加两行就行!

from rest_framework import viewsets
from .models import Book
from .serializers import BookSerializer
# 加这一句
from rest_framework.pagination import PageNumberPagination

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

    # 分页:每页 5 条
    pagination_class = PageNumberPagination
    page_size = 5  # 每页几条

访问:

http://127.0.0.1:8000/api/books/?page=1
http://127.0.0.1:8000/api/books/?page=2

✅ 搞定!


2. 推荐用法:自定义分页类(最常用)

可以自定义每页数量、最大页数、页码参数

新建一个 pagination.py(推荐)

from rest_framework.pagination import PageNumberPagination

class MyPagination(PageNumberPagination):
    page_size = 10          # 默认每页10条
    page_query_param = 'page'  # 页码参数名 ?page=1
    page_size_query_param = 'size'  # 可动态指定每页条数 ?size=20
    max_page_size = 100    # 最大每页100条

然后在视图里用:

from .pagination import MyPagination  # 导入

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer
    pagination_class = MyPagination  # 使用自定义分页

访问:

?page=1
?page=2&size=20

3. 全局配置(所有接口自动分页)

直接写在 settings.py 最下方:

# DRF 全局分页
REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10,  # 所有接口每页10条
}

✅ 所有视图不用写任何代码,自动分页!


分页后返回的 JSON 格式

{
    "count": 100,        // 总条数
    "next": "http://...?page=2",  // 下一页地址
    "previous": null,    // 上一页
    "results": [         // 当前页数据
        {...},
        {...}
    ]
}

你想使用哪种?

  1. 单个视图分页(简单)
  2. 自定义分页类(最常用)
  3. 全局分页(全部接口生效)

我可以直接帮你把你的项目代码改成带分页的完整版

posted @ 2026-05-28 16:43  ham0921  阅读(10)  评论(0)    收藏  举报