Django restframework 分页配置及自定义第一页,最后一页

本文介绍了如何在Django Restframework中配置分页,并实现自定义第一页和最后一页的功能。主要涉及设置、序列化器和视图的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

setting中:

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    # 'PAGE_SIZE': 10,  # 这里的每页最多个数是优先于自定义的。我们自定义了,就不用这个了
}

serializers中写

from rest_framework.pagination import PageNumberPagination
from rest_framework.utils.urls import remove_query_param, replace_query_param
class StandartResultsSetPagination(PageNumberPagination):
    """
        配置分页规则, 自定义第一页,最后一页
    """

    page_size = 10   # 每页显示个数
    page_size_query_param = 'page_size'   # 默认
    page_query_param = 'page'   # 默认
    max_page_size = 1000   # 最多页数

    def get_start_link(self):
        """
            第一页
        """
        if not self.page.has_previous():
            return None
        page_number = 1
        url = self.request.build_absolute_uri()
        return replace_query_param(url, self.page_query_param, page_number)

    def get_end_link(self):
        """
            最后一页
        """
        if not self.page.has_next():
            return None
        url = self.request.build_absolute_uri()
        page_number = self.page.paginator.num_pages
        print(page_number)
        return replace_query_param(url, self.page_query_param, page_number)

    def get_paginated_response(self, data):
        return Response(OrderedDict([
            ('count', self.page.paginator.count),
            ('start', self.get_start_link()),
            ('previous', self.get_previous_link()),
            ('next', self.get_next_link()),
            ('end', self.get_end_link()),
            ('results', data)
        ]))

使用方法:
views中:

class RegistrationView(viewsets.ModelViewSet):
    """
        pass
    """
    pagination_class = StandartResultsSetPagination  # 使用自定义的分页

在每个View中调用一下就可以了,这样就可以实现分页,第一页,及最后一页了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值