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 MD5文件生成码
Jan 12 Python
python进程管理工具supervisor使用实例
Sep 17 Python
Python编程中的文件读写及相关的文件对象方法讲解
Jan 19 Python
以一个投票程序的实例来讲解Python的Django框架使用
Feb 18 Python
Python中is与==判断的区别
Mar 28 Python
详解Python实现多进程异步事件驱动引擎
Aug 25 Python
python如何通过实例方法名字调用方法
Mar 21 Python
用python建立两个Y轴的XY曲线图方法
Jul 08 Python
Python通过Pillow实现图片对比
Apr 29 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
Jun 03 Python
Python获取excel内容及相关操作代码实例
Aug 10 Python
Pytorch 如何实现常用正则化
May 27 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控制网页过期时间的代码
2008/09/28 PHP
分享PHP-pcntl 实现多进程代码
2016/09/30 PHP
PHP设计模式之装饰器模式定义与用法简单示例
2018/08/13 PHP
弹出广告特效代码(一个IP只弹出一次)
2007/05/11 Javascript
javascript css styleFloat和cssFloat
2010/03/15 Javascript
JavaScript对象之间的转换 jQuery对象和原声DOM
2011/03/07 Javascript
自定义的一个简单时尚js下拉选择框
2013/11/20 Javascript
详谈jQuery中的this和$(this)
2014/11/13 Javascript
基于socket.io+express实现多房间聊天
2016/03/17 Javascript
angular.js分页代码的实例
2016/07/27 Javascript
js 实现获取name 相同的页面元素并循环遍历的方法
2017/02/14 Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
2018/03/23 Javascript
使用Node搭建reactSSR服务端渲染架构
2018/08/30 Javascript
PM2自动部署代码步骤流程总结
2018/12/10 Javascript
用原生JS实现爱奇艺首页导航栏代码实例
2019/09/19 Javascript
利用JS代码自动删除稿件的普通弹幕功能
2019/09/20 Javascript
Vue中函数防抖节流的理解及应用实现
2020/04/24 Javascript
nodejs中的异步编程知识点详解
2021/01/17 NodeJs
python 快速排序代码
2009/11/23 Python
Python性能优化的20条建议
2014/10/25 Python
Python入门教程之if语句的用法
2015/05/14 Python
基于python实现的抓取腾讯视频所有电影的爬虫
2016/04/22 Python
Python基于xlrd模块操作Excel的方法示例
2018/06/21 Python
python使用writerows写csv文件产生多余空行的处理方法
2019/08/01 Python
python flask搭建web应用教程
2019/11/19 Python
Django 博客实现简单的全文搜索的示例代码
2020/02/17 Python
django修改models重建数据库的操作
2020/03/31 Python
美国网上鞋城:Shoeline.com
2016/11/17 全球购物
英国Office鞋店德国网站:在线购买鞋子、靴子和运动鞋
2018/12/19 全球购物
趣味运动会活动方案
2014/02/12 职场文书
业务部门经理岗位职责
2014/02/23 职场文书
和睦家庭事迹
2014/05/14 职场文书
羽毛球社团活动总结
2014/06/27 职场文书
投标人法定代表人授权委托书格式
2014/09/28 职场文书
2015年简历自我评价范文
2015/03/11 职场文书
2016大学生社会实践单位评语
2015/12/01 职场文书