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 相关文章推荐
动态创建类实例代码
Oct 07 Python
pycharm修改界面主题颜色的方法
Jan 17 Python
python爬虫中多线程的使用详解
Sep 23 Python
Python Django框架防御CSRF攻击的方法分析
Oct 18 Python
python 实现目录复制的三种小结
Dec 04 Python
Python3 解决读取中文文件txt编码的问题
Dec 20 Python
python orm 框架中sqlalchemy用法实例详解
Feb 02 Python
tensorflow 环境变量设置方式
Feb 06 Python
PyCharm如何导入python项目的方法
Feb 06 Python
python3爬虫中引用Queue的实例讲解
Nov 24 Python
python Zmail模块简介与使用示例
Dec 19 Python
python中用Scrapy实现定时爬虫的实例讲解
Jan 18 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实现将wav文件转换成图像文件并在页面中显示的方法
2015/04/21 PHP
CodeIgniter配置之autoload.php自动加载用法分析
2016/01/20 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
js中cookie的添加、取值、删除示例代码
2013/10/21 Javascript
JavaScript模拟深蓝vs卡斯帕罗夫的国际象棋对局示例
2015/04/22 Javascript
javascript css红色经典选项卡效果实现代码
2016/05/17 Javascript
jQuery窗口拖动功能的实现代码
2017/02/04 Javascript
基于node.js制作简单爬虫教程
2017/06/29 Javascript
JS实现遍历不规则多维数组的方法
2018/03/21 Javascript
详解基于Vue,Nginx的前后端不分离部署教程
2018/12/04 Javascript
vue开发拖拽进度条滑动组件
2019/09/21 Javascript
Python下rrdtool模块的基本使用方法
2015/11/13 Python
Python 多线程Threading初学教程
2017/08/22 Python
将Django项目部署到CentOs服务器中
2018/10/18 Python
python接口自动化(十六)--参数关联接口后传(详解)
2019/04/16 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
Django 数据库同步操作技巧详解
2019/07/19 Python
基于Python实现扑克牌面试题
2019/12/11 Python
Python3如何在Windows和Linux上打包
2020/02/25 Python
Python高阶函数与装饰器函数的深入讲解
2020/11/10 Python
Django实现简单的分页功能
2021/02/22 Python
五个2015 年最佳HTML5 框架
2015/11/11 HTML / CSS
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
英国最大最好的无人机商店:Drones Direct
2019/07/12 全球购物
葡萄牙航空官方网站:TAP Air Portugal
2019/10/31 全球购物
linux面试题参考答案(5)
2016/11/05 面试题
营销与策划应届生求职信
2013/11/04 职场文书
车辆安全检查制度
2014/01/12 职场文书
小学生优秀评语大全
2014/04/22 职场文书
新疆民族团结演讲稿
2014/08/27 职场文书
企业党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
出国签证在职证明范本
2014/11/24 职场文书
2015年医德医风工作总结
2015/04/02 职场文书
2015年社区纪检工作总结
2015/04/21 职场文书
超市员工管理制度
2015/08/06 职场文书
接收函
2019/04/22 职场文书