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获取当前时间的方法
Jan 14 Python
Python下线程之间的共享和释放示例
May 04 Python
Python+django实现文件下载
Jan 17 Python
Python获取CPU、内存使用率以及网络使用状态代码
Feb 08 Python
python3+PyQt5+Qt Designer实现扩展对话框
Apr 20 Python
python获取命令行输入参数列表的实例代码
Jun 23 Python
python把1变成01的步骤总结
Feb 27 Python
浅谈PyQt5中异步刷新UI和Python多线程总结
Dec 13 Python
python集成开发环境配置(pycharm)
Feb 14 Python
Python %r和%s区别代码实例解析
Apr 03 Python
简单了解如何封装自己的Python包
Jul 08 Python
Django如何重置migration的几种情景
Feb 24 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
随机头像PHP版
2006/10/09 PHP
探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法
2013/06/06 PHP
php静态文件返回304技巧分享
2015/01/06 PHP
CentOS下PHP安装Oracle扩展
2015/02/15 PHP
php随机生成数字字母组合的方法
2015/03/18 PHP
屏蔽PHP默认设置中的Notice警告的方法
2016/05/20 PHP
用unescape反编码得出汉字示例
2014/04/24 Javascript
Angularjs编写KindEditor,UEidtor,jQuery指令
2015/01/28 Javascript
js实现固定显示区域内自动缩放图片的方法
2015/07/18 Javascript
js监听键盘事件的方法_原生和jquery的区别详解
2016/10/10 Javascript
vue.js指令v-model使用方法
2017/03/20 Javascript
解决vue项目打包后提示图片文件路径错误的问题
2018/07/04 Javascript
Vue如何获取数据列表展示
2019/12/11 Javascript
js实现视图和数据双向绑定的方法分析
2020/02/05 Javascript
[56:42]VP vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
[10:05]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD 选手采访
2021/03/11 DOTA
Python标准库os.path包、glob包使用实例
2014/11/25 Python
详解python里使用正则表达式的全匹配功能
2017/10/19 Python
Flask框架Flask-Principal基本用法实例分析
2018/07/23 Python
python中的不可变数据类型与可变数据类型详解
2018/09/16 Python
浅谈python脚本设置运行参数的方法
2018/12/03 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
2019/06/04 Python
python hough变换检测直线的实现方法
2019/07/12 Python
python将print输出的信息保留到日志文件中
2019/09/27 Python
Matplotlib使用字符串代替变量绘制散点图的方法
2020/02/17 Python
浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)
2020/06/04 Python
opencv 查找连通区域 最大面积实例
2020/06/04 Python
吉力贝官方网站:Jelly Belly
2019/03/11 全球购物
本科毕业生求职自荐信
2014/02/03 职场文书
学习党的群众路线剖析材料
2014/10/09 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
幼儿园教师自荐书
2015/03/06 职场文书
民事辩护词范文
2015/05/21 职场文书
谁动了我的奶酪读书笔记
2015/06/30 职场文书
教你使用Python pypinyin库实现汉字转拼音
2021/05/27 Python
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python