📅  最后修改于: 2023-12-03 14:40:52.365000             🧑  作者: Mango
Django Rest Framework 提供了一些默认的分页选项,以帮助开发人员处理大量数据并使 API 更容易导航。这些分页器可在全局和视图级别配置,并可以在视图中轻松使用。在本文中,我们将学习 DRF 提供的默认分页器。
从版本 3.2 开始,DRF 为全局 API 配置添加了一个分页器。因此,您不再需要在每个视图中指定分页器类。要配置默认全局分页器,请在您的 settings.py 文件中添加以下行:
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10
}
在上述代码中,我们指定了所有 API 视图都将使用 PageNumberPagination
类作为默认分页器,并且我们将每页的大小设置为 10。
如果您需要使用不同的分页器,您可以在视图中进行指定。例如,如果您希望使用 LimitOffsetPagination
分页器,则可以在视图中指定该类,如下所示:
from rest_framework.pagination import LimitOffsetPagination
class ExampleView(APIView):
pagination_class = LimitOffsetPagination
现在,该视图将使用 LimitOffsetPagination
分页器而不是默认的 PageNumberPagination
分页器。
返回值必须是一个包含分页信息和数据的字典。分页信息是一个包含以下键值的字典:
count
:匹配查询条件的总对象数。next
:当当前查询集有下一页时,返回其下一页的 URL。如果当前页面是最后一页,则该值为 null
。previous
:当当前查询集有上一页时,返回其上一页的 URL。如果当前页面是第一页,则该值为 null
。下面是一个使用 PageNumberPagination
分页器的示例代码片段的响应结果:
{
"count": 100,
"next": "http://api.example.com/accounts/?page=4",
"previous": "http://api.example.com/accounts/?page=2",
"results": [
{
"username": "alice",
"age": 28
},
{
"username": "bob",
"age": 36
}
]
}
在上述示例中,我们有一个分页器,每页显示 2 个项目。我们有 100 个项目,因此有 50 页。在此示例中,我们当前查看第三页,并且可访问前一页和后一页。next
字段包含指向下一页的 URL,previous
字段包含指向前一页的 URL。results
包含当前页面的条目列表。请注意,第一页没有“previous”字段,最后一页没有“next”字段。