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通过colorama模块在控制台输出彩色文字的方法
Mar 19 Python
Python机器学习之SVM支持向量机
Dec 27 Python
python2 与 pyhton3的输入语句写法小结
Sep 10 Python
Python操作json的方法实例分析
Dec 06 Python
Python玩转Excel的读写改实例
Feb 22 Python
如何基于python实现脚本加密
Dec 28 Python
基于python实现上传文件到OSS代码实例
May 09 Python
matplotlib 三维图表绘制方法简介
Sep 20 Python
基于python爬取链家二手房信息代码示例
Oct 21 Python
撤回我也能看到!教你用Python制作微信防撤回脚本
Jun 11 Python
Python实现Excel文件的合并(以新冠疫情数据为例)
Mar 20 Python
Python中的 No Module named ***问题及解决
Jul 23 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
晶体管来复再生式二管收音机
2021/03/02 无线电
5.PHP的其他功能
2006/10/09 PHP
PHP 第三节 变量介绍
2012/04/28 PHP
php 利用array_slice函数获取随机数组或前几条数据
2015/09/30 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
js实现字符串的16进制编码不加密
2014/04/25 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
2015/02/27 Javascript
JS获取iframe中marginHeight和marginWidth属性的方法
2015/04/01 Javascript
jquery中用函数来设置css样式
2016/12/22 Javascript
jQuery表格的维护和删除操作
2017/02/03 Javascript
详解Chai.js断言库API中文文档
2018/01/31 Javascript
KOA+egg.js集成kafka消息队列的示例
2018/11/09 Javascript
JavaScript设计模式之观察者模式实例详解
2019/01/16 Javascript
Vue.js实现开发购物车功能的方法详解
2019/02/22 Javascript
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
ES6数组与对象的解构赋值详解
2019/06/14 Javascript
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
[14:21]VICI vs EG (BO3)
2018/06/07 DOTA
python的id()函数介绍
2013/02/10 Python
Python and、or以及and-or语法总结
2015/04/14 Python
Python 加密与解密小结
2018/12/06 Python
python tkinter canvas 显示图片的示例
2019/06/13 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
2019/10/30 Python
python实现操作文件(文件夹)
2019/10/31 Python
keras实现VGG16方式(预测一张图片)
2020/07/07 Python
CSS3毛玻璃效果(blur)有白边问题的解决方法
2016/11/15 HTML / CSS
北美个性化礼品商店:Things Remembered
2018/06/12 全球购物
植村秀加拿大官网:Shu Uemura加拿大
2019/09/03 全球购物
三年级数学教学反思
2014/01/31 职场文书
营销总监岗位职责范本
2014/02/26 职场文书
安卓程序员求职信
2014/02/28 职场文书
应届生求职信范文
2014/05/26 职场文书
2014年中班下学期工作总结
2014/12/11 职场文书
工程项目合作意向书
2015/05/08 职场文书
简单的辞职信模板
2015/05/12 职场文书
详解CSS伪元素的妙用单标签之美
2021/05/25 HTML / CSS