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之玩转字符串(2)
Sep 14 Python
详解Django框架中的视图级缓存
Jul 23 Python
Python实现PS滤镜特效之扇形变换效果示例
Jan 26 Python
快速解决PyCharm无法引用matplotlib的问题
May 24 Python
浅析Python函数式编程
Oct 06 Python
解决pycharm回车之后不能换行或不能缩进的问题
Jan 16 Python
python绘制规则网络图形实例
Dec 09 Python
python实现微信打飞机游戏
Mar 24 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
Apr 25 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
Sep 16 Python
解决pytorch下出现multi-target not supported at的一种可能原因
Feb 06 Python
Python如何把不同类型数据的json序列化
Apr 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
Laravel模板引擎Blade中section的一些标签的区别介绍
2015/02/10 PHP
CI框架AR操作(数组形式)实现插入多条sql数据的方法
2016/05/18 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
Ext javascript建立超链接,进行事件处理的实现方法
2009/03/22 Javascript
jQuery创建自己的插件(自定义插件)的方法
2010/06/10 Javascript
js动态在form上插入enctype=multipart/form-data的问题
2012/05/24 Javascript
jQuery的attr与prop使用介绍
2013/10/10 Javascript
Mac/Windows下如何安装Node.js
2013/11/22 Javascript
javascript中几个容易混淆的概念总结
2015/04/14 Javascript
jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
2015/08/26 Javascript
JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
2015/12/13 Javascript
基于javascript html5实现多文件上传
2016/03/03 Javascript
javascript实现延时显示提示框特效代码
2016/04/27 Javascript
JS实现焦点图轮播效果的方法详解
2016/12/19 Javascript
js移动端图片压缩上传功能
2020/08/18 Javascript
基于vue实现分页效果
2017/11/06 Javascript
vue自定义js图片碎片轮播图切换效果的实现代码
2019/04/28 Javascript
使用简单工厂模式来进行Python的设计模式编程
2016/03/01 Python
python文件特定行插入和替换实例详解
2017/07/12 Python
Python数据结构与算法之二叉树结构定义与遍历方法详解
2017/12/12 Python
Python 窗体(tkinter)按钮 位置实例
2019/06/13 Python
python实例化对象的具体方法
2020/06/17 Python
python 19个值得学习的编程技巧
2020/08/15 Python
详解Django中views数据查询使用locals()函数进行优化
2020/08/24 Python
python opencv pytesseract 验证码识别的实现
2020/08/28 Python
英国电视和家用电器购物网站:rlrdistribution.co.uk
2018/11/20 全球购物
.NET面试题:什么是值类型和引用类型
2016/01/12 面试题
计算机本科生自荐信
2013/10/15 职场文书
2014学雷锋活动总结
2014/03/09 职场文书
法人身份证明书
2014/10/08 职场文书
教师党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
大学生毕业评语
2014/12/31 职场文书
单位证明范文
2015/06/18 职场文书
敬老院活动感想
2015/08/07 职场文书
JS封装cavans多种滤镜组件
2022/02/15 Javascript
vue组件vue-esign实现电子签名
2022/04/21 Vue.js