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 01 Python
python BeautifulSoup设置页面编码的方法
Apr 03 Python
详尽讲述用Python的Django框架测试驱动开发的教程
Apr 22 Python
使用PyV8在Python爬虫中执行js代码
Feb 16 Python
深入理解Python3中的http.client模块
Mar 29 Python
Python解析命令行读取参数--argparse模块使用方法
Jan 23 Python
TensorFlow实现Batch Normalization
Mar 08 Python
pyttsx3实现中文文字转语音的方法
Dec 24 Python
使用matplotlib中scatter方法画散点图
Mar 19 Python
python求平均数、方差、中位数的例子
Aug 22 Python
Python爬取酷狗MP3音频的步骤
Feb 26 Python
pytorch 6 batch_train 批训练操作
May 28 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/07/03 PHP
PHP ? EasyUI DataGrid 资料存的方式介绍
2012/11/07 PHP
PHP的拦截器实例分析
2014/11/03 PHP
四种php中webservice实现的简单架构方法及实例
2015/02/03 PHP
PHP扩展开发教程(总结)
2015/11/04 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
2017/02/10 PHP
Laravel如何实现适合Api的异常处理响应格式
2020/06/14 PHP
收藏一些不常用,但是有用的代码
2007/03/12 Javascript
JScript中使用ADODB.Stream判断文件编码的代码
2008/06/09 Javascript
jquery实现的下拉和收缩效果示例
2014/08/21 Javascript
EasyUi datagrid 实现表格分页
2015/02/10 Javascript
QQ登录背景闪动效果附效果演示源码下载
2015/09/22 Javascript
JS获取月份最后天数、最大天数与某日周数的方法
2015/12/08 Javascript
标准的js无缝滚动效果
2016/08/30 Javascript
JS实现六边形3D拖拽翻转效果的方法
2016/09/11 Javascript
ng2学习笔记之bootstrap中的component使用教程
2017/03/09 Javascript
vue脚手架vue-cli的学习使用教程
2017/06/06 Javascript
JS 实现微信扫一扫功能
2018/09/14 Javascript
在vue中使用echarts(折线图的demo,markline用法)
2020/07/20 Javascript
你不知道的SpringBoot与Vue部署解决方案
2020/11/09 Javascript
Vue基于localStorage存储信息代码实例
2020/11/16 Javascript
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python基础教程之序列详解
2014/08/29 Python
Python中处理字符串之islower()方法的使用简介
2015/05/19 Python
对pandas中时间窗函数rolling的使用详解
2018/11/28 Python
Python Websocket服务端通信的使用示例
2020/02/25 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
2020/02/29 Python
HTML5本地存储之Web Storage详解
2016/07/04 HTML / CSS
html5是什么_动力节点Java学院整理
2017/07/07 HTML / CSS
杭州联环马网络笔试题面试题
2013/08/04 面试题
中国央视网签名寄语
2014/01/18 职场文书
教育局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
销售简历自我评价怎么写
2014/09/26 职场文书
培养联系人考察意见
2015/06/01 职场文书
傅雷家书读书笔记
2015/06/29 职场文书
药品销售员2015年终工作总结
2015/10/22 职场文书