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装饰器decorator介绍
Nov 21 Python
在Python的Flask框架中使用日期和时间的教程
Apr 21 Python
总结Python中逻辑运算符的使用
May 13 Python
python检测主机的连通性并记录到文件的实例
Jun 21 Python
python发送告警邮件脚本
Sep 17 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
May 31 Python
python之yield和Generator深入解析
Sep 18 Python
python NumPy ndarray二维数组 按照行列求平均实例
Nov 26 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
Apr 22 Python
Keras自定义实现带masking的meanpooling层方式
Jun 16 Python
python3.x中安装web.py步骤方法
Jun 23 Python
用Python实现职工信息管理系统
Dec 30 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
第七节--类的静态成员
2006/11/16 PHP
PHP写的加密函数,支持私人密钥(详细介绍)
2013/06/09 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
2013/07/19 PHP
php版微信自动登录并获取昵称的方法
2016/09/23 PHP
PHPCMS V9 添加二级导航的思路详解
2016/10/20 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
2017/03/31 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
Yii 框架入口脚本示例分析
2020/05/19 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
PHP中SESSION过期设置
2021/03/09 PHP
js性能优化 如何更快速加载你的JavaScript页面
2012/03/17 Javascript
微信小程序 下拉菜单简单实例
2017/04/13 Javascript
微信小程序实现的自定义分享功能示例
2019/02/12 Javascript
如何从头实现一个node.js的koa框架
2019/06/17 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
[36:43]NB vs Optic 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
[54:05]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第一场 1月9日
2021/03/11 DOTA
分析python服务器拒绝服务攻击代码
2014/01/16 Python
python通过文件头判断文件类型
2015/10/30 Python
Python将图片批量从png格式转换至WebP格式
2020/08/22 Python
python 按不同维度求和,最值,均值的实例
2018/06/28 Python
python3 http提交json参数并获取返回值的方法
2018/12/19 Python
Python3 使用selenium插件爬取苏宁商家联系电话
2019/12/23 Python
python实现文件+参数发送request的实例代码
2021/01/05 Python
HTML5 canvas基本绘图之图形变换
2016/06/27 HTML / CSS
博士学位自我鉴定范文
2013/12/26 职场文书
中国文明网签名寄语
2014/01/18 职场文书
员工评语大全
2014/01/19 职场文书
2014年行政部工作总结
2014/11/19 职场文书
2015年七一建党节慰问信
2015/03/23 职场文书
青春雷锋观后感
2015/06/10 职场文书
2015年政教主任工作总结
2015/07/23 职场文书
医疗纠纷调解协议书
2015/08/06 职场文书
Python自动化测试PO模型封装过程详解
2021/06/22 Python
MySQL系列之十五 MySQL常用配置和性能压力测试
2021/07/02 MySQL
Windows server 2022创建创建林、域树、子域的步骤
2022/06/25 Servers