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 11 Python
Python实现基本线性数据结构
Aug 22 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
Dec 12 Python
numpy给array增加维度np.newaxis的实例
Nov 01 Python
python pands实现execl转csv 并修改csv指定列的方法
Dec 12 Python
python3+PyQt5 实现Rich文本的行编辑方法
Jun 17 Python
python绘制已知点的坐标的直线实例
Jul 04 Python
python matplotlib库绘制散点图例题解析
Aug 10 Python
pytorch动态网络以及权重共享实例
Jan 06 Python
Python3实现飞机大战游戏
Apr 24 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
Nov 27 Python
使用Python通过企业微信应用给企业成员发消息
Apr 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 静态变量与自定义常量的使用方法
2010/01/26 PHP
PHP Memcached + APC + 文件缓存封装实现代码
2010/03/11 PHP
Js+XML 操作
2006/09/20 Javascript
Javascript MD4
2006/12/20 Javascript
javascript 写的一个简单的timer
2009/07/30 Javascript
关于javascript 回调函数中变量作用域的讨论
2009/09/11 Javascript
js输出列表实现代码
2010/09/12 Javascript
DWR实现模拟Google搜索效果实现原理及代码
2013/01/30 Javascript
javascript面向对象之this关键词用法分析
2015/01/13 Javascript
$.extend 的一个小问题
2015/06/18 Javascript
node.js抓取并分析网页内容有无特殊内容的js文件
2015/11/17 Javascript
深入浅析JavaScript中with语句的理解
2016/05/12 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
vue2.0移除或更改的一些东西(移除index key)
2017/08/28 Javascript
javascript实现blob加密视频源地址的方法
2019/08/08 Javascript
Vue 权限控制的两种方法(路由验证)
2019/08/16 Javascript
layer.open组件获取弹出层页面变量、函数的实例
2019/09/25 Javascript
vue 开发企业微信整合案例分析
2019/12/02 Javascript
python判断给定的字符串是否是有效日期的方法
2015/05/13 Python
Python中使用装饰器来优化尾递归的示例
2016/06/18 Python
python利用多种方式来统计词频(单词个数)
2019/05/27 Python
利用Python校准本地时间的方法教程
2019/10/31 Python
简单几步用纯CSS3实现3D翻转效果
2019/01/17 HTML / CSS
类的核心特性有哪些
2014/01/01 面试题
在什么时候需要使用"常引用"
2015/12/31 面试题
自我鉴定写作要点
2014/01/17 职场文书
大学生职业生涯规划书
2014/03/14 职场文书
留学经费担保书
2014/05/12 职场文书
大专毕业生自我鉴定范文(2篇)
2014/09/27 职场文书
民主生活会剖析材料
2014/09/30 职场文书
学校师德师风整改方案
2014/10/28 职场文书
实习生辞职信范文
2015/03/02 职场文书
创业者如何撰写出一份打动投资人的商业计划书?
2019/07/02 职场文书
预备党员入党思想汇报(范文)
2019/08/14 职场文书
MySQL数据库中的锁、解锁以及删除事务
2022/05/06 MySQL