Django分页器(post,和get方法详解)

本文详细介绍了如何使用Django通过GET和POST方法实现分页功能。GET方式实现分页会在页面刷新时切换,而POST方式则在不刷新页面的情况下更新内容。文章提供了直接可使用的代码模板,并建议将此类通用代码存放在utils文件夹以供复用。

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

首先需要明确的是,get请求/post请求都可以携带参数,所以在朝后端发送数据时,可以携带一个参数告诉后端我们想看第几页的数据。

还有一点就是,queryset对象支持索引和切片操作,但是不支持负数索引情况。

后端通过get方式实现分页功能,每次切换页的时候,会刷新页面。

后端通过post方式实现分页功能,每次切换页的时候,不会刷新页面,只会重新渲染下一页的内容。

简单推导:

        这里的推导在get方法中不需要用,有封装好的代码,在post方法中,需要用到下面的推导

current_page = request.GET.get("page",1)  # 获取用户想访问的页码(默认为 1 )

try:  
  current_page = int(current_page)
except Exception as e:
  current_page = 1
# 前端传过来的数据类型为字符串,所以要做异常捕获,将字符串转为整形

# 还需要定义页面到底展示几条数据
per_page_num = 10  # 一页展示10条数据
 
# 需要对总数据进行切片操作 需要确定切片起始位置和终止位置
start_page = ? 
end_page = ?
"""
下面需要研究current_page、per_page_num、start_page、end_page四个参数之间的数据关系
per_page_num = 10
current_page                start_page                  end_page
    1                           0                           10
    2                           10                          20
    3                           20                          30  
    4                           30                          40
 
per_page_num = 5
current_page                start_page                  end_page
    1                           0                           5
    2                           5                           10
    3                           10                          15  
    4                           15                          20
"""

可以很明显的看出规律
start_page = (current_page - 1) * per_page_num
# 开始条数为 :(要看的页数-1)*每页展示的条数

end_page =  current_page* per_page_num
# 结束条数为 : (要看的页数)*每页展示的条数

get方法实现分页器功能:

          1 将下面代码直接复制:
class Pagination(object):
    def __init__(self, current_page, all_count, per_page_num=2, pager_count=11):
        """
        封装分页相关数据
        :param current_page: 当前页
        :param all_count:    数据库中的数据总条数
        :param per_page_num: 每页显示的数据条数
        :param pager_count:  最多显示的页码个数
        """
        try:
            current_page = int(current_page)
        except Exception as e:
            current_page = 1
 
        if current_page < 1:
            current_page = 1
 
        self.current_page = current_page
 
        self.all_count = all_count
        self.per_page_num = per_page_num
 
        # 总页码
        all_pager, tmp = divmod(all_count, per_page_num)
        if tmp:
            all_pager += 1
        self.all_pager = all_pager
 
        self.pager_count = pager_count
        self.pager_count_half = int((pager_count - 1) / 2)
 
    @property
    def start(self):
        return (self.current_page - 1) * self.per_page_num
 
    @property
    def end(self):
        return self.current_page * self.per_page_num
 
    def page_html(self):
        # 如果总页码 < 11个:
        if self.all_pager <= self.pager_count:
            pager_start = 1
            pager_end = self.all_p
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值