Django实现基于类的分页功能


Posted in Python onOctober 31, 2019

开发个人博客时往往避免不了分页功能的实现,实现方法大体上分为函数和类两种。本文基于类实现分页功能,以下是详细代码:

class Page:
 page_num = 0
 total_count = 0
 tartype = ""
 total_page = 0 # 总页数
 per_page = 8 # 每页显示8篇文章
 max_page = 11 # 每页最大展示页数选项
 half_page = max_page // 2
 category = "" # 标记该链接所属分类ID,首页默认为空

 def __init__(self, page_num, total_count, tartype, category):
 """
 初始化函数:接收页码数、总数据数,计算总页码数并过滤错误页码数据
 :param page_num: 页码数
 :param total_count: 总数据数
 :param tartype: 分类值
 :param category: 所属分类ID
 """
 self.page_num = page_num
 self.total_count = total_count
 self.tartype = tartype
 self.total_page, m = divmod(self.total_count, self.per_page) # 总页码数,余数为m
 if category:
  self.category = category
 if m:
  self.total_page += 1
 if self.total_page < self.max_page:
  self.max_page = self.total_page
  self.half_page = self.max_page // 2
 # 过滤错误get数据
 if self.page_num > self.total_page:
  self.page_num = self.total_page
 elif self.page_num < 1:
  self.page_num = 1

 def data_start(self):
 return (self.page_num - 1) * self.per_page

 def data_end(self):
 return self.page_num * self.per_page

 def page_html(self):
 # 计算页数选项
 page_start = self.page_num - self.half_page
 page_end = self.page_num + self.half_page
 if page_start <= 1:
  page_start = 1
  page_end = self.max_page
 if page_end >= self.total_page:
  page_end = self.total_page
  page_start = self.total_page - self.max_page + 1
 # 计算上一页下一页选项
 if self.page_num == 1:
  last_page = self.page_num
  next_page = self.page_num + 1
 else:
  if self.page_num == self.total_page:
  last_page = self.page_num - 1
  next_page = self.page_num
  else:
  last_page = self.page_num - 1
  next_page = self.page_num + 1
 print(self.category)
 html_str_list = []
 html_str_list.append('<li><a href="/{}/?page={}{}" >«</a></li>'.format(self.tartype, last_page, self.category))
 for i in range(page_start, page_end + 1):
  if i == self.page_num:
  tmp = '<li><a class="active" href="/{}/?page={}{}" >{}</a></li>'.format(self.tartype, i, self.category, i)
  html_str_list.append(tmp)
  continue
  tmp = '<li><a href="/{}/?page={}{}" >{}</a></li>'.format(self.tartype, i, self.category, i)
  html_str_list.append(tmp)
 html_str_list.append('<li><a href="/{}/?page={}{}" >»</a></li>'.format(self.tartype, next_page, self.category))
 page_html = "".join(html_str_list)
 return page_html

通过修改per_page、max_page控制每页展示的文章数和分页模块展示的最大页码数。

实现思路:创建page类对象,传入参数为page_num(当前页码数)、total_count(总文章数)、tartype(分类值)、category(所属分类ID)【注:tartpe用于区分index页还是category页,category为查询的分类ID,index页时值为空。可以根据自己要实现的功能进行修改】构造函数会计算出总页码数并过滤掉错误数据。需要实现某功能是直接调用类方法即可。

类方法:data_start()计算出当前页的文章的起始索引值
data_end()计算出当前页的文章的起始索引值
page_html()返回分页模块的html代码,可直接render到前端。

实现效果:

文章较少时:

Django实现基于类的分页功能

文章较多时:

Django实现基于类的分页功能

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
用Python的Django框架完成视频处理任务的教程
Apr 02 Python
使用Python脚本对Linux服务器进行监控的教程
Apr 02 Python
Python psutil模块简单使用实例
Apr 28 Python
pyside+pyqt实现鼠标右键菜单功能
Dec 08 Python
python中的协程深入理解
Jun 10 Python
python3用PIL把图片转换为RGB图片的实例
Jul 04 Python
python全局变量引用与修改过程解析
Jan 07 Python
Pytorch实现神经网络的分类方式
Jan 08 Python
python中文分词库jieba使用方法详解
Feb 11 Python
如何在sublime编辑器中安装python
May 20 Python
python3.7 openpyxl 在excel单元格中写入数据实例
Sep 01 Python
超级详细实用的pycharm常用快捷键
May 12 Python
python Django框架实现web端分页呈现数据
Oct 31 #Python
python3常用的数据清洗方法(小结)
Oct 31 #Python
Django实现网页分页功能
Oct 31 #Python
8段用于数据清洗Python代码(小结)
Oct 31 #Python
利用Python绘制有趣的万圣节南瓜怪效果
Oct 31 #Python
python实现大量图片重命名
Mar 23 #Python
python3图片文件批量重命名处理
Oct 31 #Python
You might like
一个SQL管理员的web接口
2006/10/09 PHP
PHP为表单获取的URL 地址预设 http 字符串函数代码
2010/05/26 PHP
探讨:如何使用PhpDocumentor生成文档
2013/06/25 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
2016/02/15 PHP
页面调用单个swf文件,嵌套出多个方法。
2011/11/21 Javascript
js中的eventType事件及其浏览器支持性介绍
2013/11/29 Javascript
js检测网络是否具体连接功能的代码
2014/05/23 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 简史
2015/01/09 Javascript
基于Jquery+div+css实现弹出登录窗口(代码超简单)
2015/10/27 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
详解Backbone.js框架中的模型Model与其集合collection
2016/05/05 Javascript
JS中使用变量保存arguments对象的方法
2016/06/03 Javascript
AngularJS表格详解及示例代码
2016/08/17 Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
2017/02/27 Javascript
JavaScript设计模式之命令模式实例分析
2019/01/16 Javascript
js打开word文档预览操作示例【不是下载】
2019/05/23 Javascript
vue项目中全局引入1个.scss文件的问题解决
2019/08/01 Javascript
springboot+vue+对接支付宝接口+二维码扫描支付功能(沙箱环境)
2020/10/15 Javascript
[40:29]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第一场
2018/04/10 DOTA
python的常见命令注入威胁
2013/02/18 Python
用Python实现一个简单的能够发送带附件的邮件程序的教程
2015/04/08 Python
解决pyqt中ui编译成窗体.py中文乱码的问题
2016/12/23 Python
Python小白必备的8个最常用的内置函数(推荐)
2019/04/03 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
2020/09/20 Python
python 可视化库PyG2Plot的使用
2021/01/21 Python
HTML5 通过Vedio标签实现视频循环播放的示例代码
2020/08/05 HTML / CSS
马来西亚银饰品牌:JEOEL
2017/12/15 全球购物
Myprotein法国官网:欧洲第一运动营养品牌
2019/03/26 全球购物
运动会入场式解说词
2014/02/18 职场文书
工作期间打牌检讨书范文
2014/11/20 职场文书
2015年清明节演讲稿范文
2015/03/17 职场文书
现实表现证明材料
2015/06/19 职场文书
2016年优秀党员教师先进事迹材料
2016/02/29 职场文书
2019年入党思想汇报格式与要求
2019/06/25 职场文书
Python+DeOldify实现老照片上色功能
2022/06/21 Python
nginx之内存池的实现
2022/06/28 Servers