尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Django分页封装

Django分页封装
📅 发布时间:2026/7/3 4:32:34

page_data.py

from django.utils.safestring import mark_safe from copy import deepcopy class PageData: def __init__(self,request,queryset,page_size=1,page_num=3,page_param='page'): ''' request:请求 queryset:数据表的查询结果 pagesize:一页显示多少条数据 page_num:当前页面显示多少个页码 page_param:翻页参数 ''' get_query_dict=deepcopy(request.GET) self.query_dict=get_query_dict self.page_param=page_param page=request.GET.get(page_param,"1") if page.isdecimal(): page=int(page) else: page=1 self.page=page self.start=(page-1)*page_size self.end=page*page_size self.page_queryset = queryset[self.start:self.end] page_count = queryset.count() #一共要显示多少页 page_count, yushu = divmod(page_count, page_size) if yushu: page_count += 1 self.page_count=page_count self.page_num=page_num def page_html(self): # 判断数据表当中的数据总共能否展示7页 if self.page_count <= self.page_num * 2 + 1: start_page = 1 end_page = self.page_count else: # 当前选中的页面小于三 if self.page <= self.page_num: start_page = 1 end_page = 2 * self.page_num + 1 else: # 当前选中的页面,如果是最后三页 if (self.page + self.page_num) > self.page_count: start_page = self.page_count - 2 * self.page_num end_page = self.page_count else: start_page = self.page - self.page_num end_page = self.page + self.page_num # 存放html代码 page_list = [] self.query_dict.setlist(self.page_param,[1]) if self.page==1: #首页 #上一页 page_list.append(f'<li class="disabled"><a href="?{self.query_dict.urlencode()}">首页</a></li>') page_list.append(f'<li class="disabled"><a href="?{self.query_dict.urlencode()}">上一页</a></li>') else: self.query_dict.setlist(self.page_param, [1]) page_list.append(f'<li><a class="page-first" href="?{self.query_dict.urlencode()}">首页</a></li>') self.query_dict.setlist(self.page_param, [self.page - 1]) page_list.append(f'<li><a href="?{self.query_dict.urlencode()}">上一页</a></li>') #页码 # 定义开始和结束页 for page_num_ye in range(start_page, end_page + 1): if page_num_ye==self.page: self.query_dict.setlist(self.page_param, [page_num_ye]) page_list.append(f'<li class="active"><a href="?{self.query_dict.urlencode()}">{page_num_ye}</a></li>') else: self.query_dict.setlist(self.page_param, [page_num_ye]) page_list.append(f'<li><a href="?{self.query_dict.urlencode()}">{page_num_ye}</a></li>') if self.page < self.page_count: self.query_dict.setlist(self.page_param, [self.page +1]) page_list.append(f'<li><a href="?{self.query_dict.urlencode()}">下一页</a></li>') self.query_dict.setlist(self.page_param, [self.page_count]) page_list.append(f'<li><a class="page-first" href="?{self.query_dict.urlencode()}">尾页</a></li>') #下一页 #尾页 else: page_list.append(f'<li class="disabled"><a href="?{self.query_dict.urlencode()}">下一页</a></li>') page_list.append(f'<li class="disabled"><a href="?{self.query_dict.urlencode()}">尾页</a></li>') #跳转 # 跳转页 search_page = f""" <li class="page-jump"> <form method="get" class="form-inline"> <input type="number" name="{self.page_param}" min="1" value="{self.page}" placeholder="页码" class="form-control"> <button type="submit">跳转</button> </form> </li> """ page_list.append(search_page) # 将字符串传递给前端页面 page_str = mark_safe(''.join(page_list)) return page_str

views中引用

from utils_app.utils.page_data import PageData #方法中 userlist = models.UserInfo.objects.filter(**data_dict) data =PageData(request,userlist) content = { 'userlist':data.page_queryset, 'page_str':data.page_html() } return render(request, "admin/admin.html",content)

相关新闻

  • Selenium自动化测试与动态网页爬虫实战指南
  • ThinkPad风扇控制终极指南:TPFanCtrl2实现128级无级调速与智能温控
  • 近期零基础量化,工具重点要跟着阶段变

最新新闻

  • 多维聚合中的数据变形术:维度层级、度量类型与变形链路实战
  • X MCP 重磅上线:AI Agent 从聊天走向真实世界的新入口
  • 【真实原创】犬视网膜色素上皮细胞(RPE)的提分离、培养和鉴定方案
  • Facebook卖家的这个操作,让多少好品白白送命
  • Eclipse 调试时弹出 Edit Source Lookup Path
  • 如何将Switch游戏画面传输到电脑:SysDVR终极使用指南

日新闻

  • JMeter接口测试实战:从核心元件到复杂场景构建
  • Java Applet版刽子手游戏源码:含完整项目结构、吊杆绘图与胜负逻辑
  • 使用Apache JMeter对RoadRunner PHP应用进行性能测试与调优指南

周新闻

  • Windows字体自定义终极方案:No!! MeiryoUI完全指南
  • Deepin Boot Maker:告别命令行,3分钟制作Linux启动盘的智能解决方案
  • Plain Craft Launcher 2:重新定义你的Minecraft游戏体验

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号