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中给List添加元素的4种方法分享
Nov 28 Python
Python的Urllib库的基本使用教程
Apr 30 Python
Python的迭代器和生成器
Jul 29 Python
Python正规则表达式学习指南
Aug 02 Python
Python迭代和迭代器详解
Nov 10 Python
简单谈谈Python中的闭包
Nov 30 Python
Apache如何部署django项目
May 21 Python
用python写扫雷游戏实例代码分享
May 27 Python
用python的turtle模块实现给女票画个小心心
Nov 23 Python
Python 内置函数globals()和locals()对比详解
Dec 23 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
Apr 22 Python
Pytorch实现WGAN用于动漫头像生成
Mar 04 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
收音机史话 - 1960年代前后的DIY
2021/03/02 无线电
php不用内置函数对数组排序的两个算法代码
2010/02/08 PHP
浅析php适配器模式(Adapter)
2014/11/25 PHP
PHP针对JSON操作实例分析
2015/01/12 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
2017/09/30 PHP
jquery中的常用事件bind、hover、toggle等示例介绍
2014/07/21 Javascript
JavaScript更改字符串的大小写
2015/05/07 Javascript
Jquery easyui开启行编辑模式增删改操作
2016/01/14 Javascript
基于JS实现横线提示输入验证码随验证码输入消失(js验证码的实现)
2016/10/27 Javascript
jQuery 的 ready()的纯js替代方法
2016/11/20 Javascript
老生常谈jquery id选择器和class选择器的区别
2017/02/12 Javascript
纯JS单页面赛车游戏制作代码分享
2017/03/03 Javascript
详解RequireJS按需加载样式文件
2017/04/12 Javascript
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
vue车牌号校验和银行校验实战
2019/01/23 Javascript
vue使用代理解决请求跨域问题详解
2019/07/24 Javascript
Vue3为什么这么快
2020/09/23 Javascript
[39:53]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.19
2020/11/19 DOTA
利用python批量检查网站的可用性
2016/09/09 Python
微信跳一跳游戏python脚本
2020/04/01 Python
python 批量修改/替换数据的实例
2018/07/25 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
2018/07/27 Python
python学生信息管理系统(完整版)
2020/04/05 Python
python ---lambda匿名函数介绍
2019/03/13 Python
超简单使用Python换脸实例
2019/03/27 Python
python打包exe开机自动启动的实例(windows)
2019/06/28 Python
python实现网页录音效果
2020/10/26 Python
纯CSS3制作漂亮带动画效果的主机价格表
2015/04/25 HTML / CSS
深入理解css属性的选择对动画性能的影响
2016/04/20 HTML / CSS
英国标志性生活方式品牌:Skinnydip London
2019/12/15 全球购物
网络维护中文求职信
2014/01/03 职场文书
幼儿园新年寄语
2014/04/03 职场文书
2014年文学毕业生自我鉴定
2014/04/23 职场文书
2014年中秋寄语
2014/08/11 职场文书
革命英雄事迹演讲稿
2014/09/13 职场文书
python基于tkinter制作m3u8视频下载工具
2021/04/24 Python