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 调用DLL操作抄表机
Jan 12 Python
python实现对一个完整url进行分割的方法
Apr 29 Python
Python中的多行注释文档编写风格汇总
Jun 16 Python
python 写入csv乱码问题解决方法
Oct 23 Python
浅谈Python使用Bottle来提供一个简单的web服务
Dec 27 Python
python爬虫URL重试机制的实现方法(python2.7以及python3.5)
Dec 18 Python
PyQt编程之如何在屏幕中央显示窗体的实例
Jun 18 Python
python实现共轭梯度法
Jul 03 Python
Python中bisect的用法及示例详解
Jul 20 Python
如何基于Python和Flask编写Prometheus监控
Nov 25 Python
python 模块导入问题汇总
Feb 01 Python
OpenCV项目实践之停车场车位实时检测
Apr 11 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入门的学习方法
2007/01/02 PHP
PHP校验ISBN码的函数代码
2011/01/17 PHP
探讨如何在PHP开启gzip页面压缩实例
2013/06/09 PHP
php导出CSV抽象类实例
2014/09/24 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
2015/06/06 PHP
详解PHP数组赋值方法
2015/11/07 PHP
php生成word并下载代码实例
2019/03/15 PHP
JScript中的undefined和&quot;undefined&quot;的区别
2007/03/08 Javascript
javascript判断iphone/android手机横竖屏模式的函数
2011/12/20 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
jQuery打印指定区域Html页面并自动分页
2014/07/04 Javascript
node.js中的emitter.on方法使用说明
2014/12/10 Javascript
js全选实现和判断是否有复选框选中的方法
2015/02/17 Javascript
jQuery.Highcharts.js绘制柱状图饼状图曲线图
2015/03/14 Javascript
JS/Jquery判断对象为空的方法
2015/06/11 Javascript
jQuery删除当前节点元素
2016/12/07 Javascript
jquery,js简单实现类似Angular.js双向绑定
2017/01/13 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
基于node.js之调试器详解
2017/08/22 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
2019/09/17 Javascript
本地文件上传到七牛云服务器示例(七牛云存储)
2014/01/11 Python
python写的一个文本编辑器
2014/01/23 Python
python3的数据类型及数据类型转换实例详解
2019/08/20 Python
简单了解为什么python函数后有多个括号
2019/12/19 Python
Python爬虫实现自动登录、签到功能的代码
2020/08/20 Python
Python os库常用操作代码汇总
2020/11/03 Python
机械专业应届生求职信
2013/12/12 职场文书
财务会计专业个人求职信范本
2014/01/08 职场文书
楼面部长岗位职责范本
2014/02/14 职场文书
市场营销方案范文
2014/03/11 职场文书
上课不认真检讨书
2014/09/17 职场文书
中学推普周活动总结
2015/05/07 职场文书
患者身份识别制度
2015/08/06 职场文书
Redis 配置文件重要属性的具体使用
2021/05/20 Redis
Nginx安装配置详解
2022/06/25 Servers
Win11控制面板快捷键是什么?Win11打开控制面板的方法汇总
2022/07/07 数码科技