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实现的数据结构与算法之双端队列详解
Apr 22 Python
python开发之字符串string操作方法实例详解
Nov 12 Python
用生成器来改写直接返回列表的函数方法
May 25 Python
python用pickle模块实现“增删改查”的简易功能
Jun 07 Python
Python实现曲线点抽稀算法的示例
Oct 12 Python
SVM基本概念及Python实现代码
Dec 27 Python
详谈python3中用for循环删除列表中元素的坑
Apr 19 Python
python之super的使用小结
Aug 13 Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
Dec 26 Python
Django中自定义admin Xadmin的实现代码
Aug 09 Python
基于python plotly交互式图表大全
Dec 07 Python
CentOS 7如何实现定时执行python脚本
Jun 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
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
php 连接mysql连接被重置的解决方法
2011/02/15 PHP
php获取文件类型和文件信息的方法
2015/07/10 PHP
PHP获取指定月份第一天和最后一天的方法
2015/07/18 PHP
Iframe thickbox2.0使用的方法
2009/03/05 Javascript
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
2010/06/30 Javascript
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
JS实现网页表格自动变大缩小的方法
2015/03/09 Javascript
jQuery标签编辑插件Tagit使用指南
2015/04/21 Javascript
element UI upload组件上传附件格式限制方法
2018/09/04 Javascript
Vue.js更改调试地址端口号的实例
2018/09/19 Javascript
Node.js npm命令运行node.js脚本的方法
2018/10/10 Javascript
vue调试工具vue-devtools安装及使用方法
2018/11/07 Javascript
vue实现跨域的方法分析
2019/05/21 Javascript
[18:20]DOTA2 HEROS教学视频教你分分钟做大人-昆卡
2014/06/11 DOTA
wxPython事件驱动实例详解
2014/09/28 Python
Python实现list反转实例汇总
2014/11/11 Python
python 基本数据类型占用内存空间大小的实例
2018/06/12 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
2018/07/09 Python
python在html中插入简单的代码并加上时间戳的方法
2018/10/16 Python
Django 视图层(view)的使用
2018/11/09 Python
python 实现矩阵上下/左右翻转,转置的示例
2019/01/23 Python
python 消费 kafka 数据教程
2019/12/21 Python
PyTorch中permute的用法详解
2019/12/30 Python
tensorflow实现测试时读取任意指定的check point的网络参数
2020/01/21 Python
Python中三维坐标空间绘制的实现
2020/09/22 Python
python实现图片转字符画
2021/02/19 Python
css3实例教程 一款纯css3实现的环形导航菜单
2014/10/20 HTML / CSS
省级青年文明号申报材料
2014/05/23 职场文书
销售代理协议书
2014/09/30 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
公务员年度考核评语
2014/12/31 职场文书
社会治安综合治理责任书
2015/01/29 职场文书
Django给表单添加honeypot验证增加安全性
2021/05/06 Python
浅谈MySQL user权限表
2021/06/18 MySQL
JS轻量级函数式编程实现XDM二
2022/06/16 Javascript