当前位置: 首页 > news >正文

Django分页封装

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)
http://www.jsqmd.com/news/1113153/

相关文章:

  • 近期零基础量化,工具重点要跟着阶段变
  • 马尔可夫链与HMM工程实战:从状态设计到生产部署
  • 组件类型-Props-Emits-Ref
  • 一次性讲清楚 Node.js 事件循环(Event Loop)
  • Selenium自动化测试与动态网页爬虫实战指南
  • 二十年只为超越,ROG玩家国度与蜘蛛侠共赴英雄新章
  • 搭建微信电商小程序要多少钱:定制和SaaS商城怎么选更适合实体店
  • ThinkPad风扇控制终极指南:TPFanCtrl2实现128级无级调速与智能温控
  • DALL·E Mini本地部署实战:轻量级文本生成图像入门指南
  • CPPM注册职业采购经理怎么报名?报考条件、费用和证书查询一次说清
  • 梯度下降工程实践:从GPU训练到嵌入式微调的全栈调试指南
  • 2025-2026中国高端门窗十大品牌解析:核心实力与行业发展指南
  • 自动驾驶量产落地的11个关键节点与三大非热点机会
  • 智慧校园运维升级实战:IoT智能锁通断电联动+身份核验解决方案落地
  • 云服务器别只看CPU:一篇讲透带宽、计费与长期成本的实用指南
  • 支付系统重复收费难题:幂等键依赖的四个假设及应对之策
  • 5步快速掌握Godot逆向工程工具:资源提取与脚本反编译终极指南
  • 3分钟掌握BurpCrypto插件:实战DES加密登录接口自动化测试
  • 驾照翻译多少钱?怎么办理?费用明细+正规办理流程保姆级攻略
  • 机器学习生产化落地:四层健康探针实战指南
  • 从提示词工程到 Harness Engineering:打造坚实可靠的 AI 开发系统
  • ZCode对接商汤免费模型全流程教程
  • Python登录小程序开发教程
  • 为什么AI语音机器人要分营销和客服两种
  • 固定式与手持式RFID阅读器选型:工业RFID系统架构与部署分析
  • 国产大模型编码能力实测:DeepSeek-Coder、GLM-4-Code与Kimi-Math-Code工程对比
  • 别再每次重复写提示词了!OpenCode Skills 一招让你的 AI 编程效率翻倍
  • Kiran-Flameshot故障排除:常见问题解决方案大全
  • Java 必看:如何正确重写 hashCode() 和 equals() 方法?
  • IOT平台怎么选?制造业数字化转型指南