python前后端自定义分页器


Posted in Python onApril 13, 2022

自定义分页器封装代码

封装分页相关数据:

  • :param current_page: 当前页
  • :param all_count: 数据库中的数据总条数
  • :param per_page_num: 每页显示的数据条数
  • :param pager_count: 最多显示的页码个数
class Pagination(object):
def __init__(self, current_page, all_count, per_page_num=2, pager_count=11):

try:
current_page = int(current_page)
except Exception as e:
current_page = 1

if current_page < 1:
current_page = 1

self.current_page = current_page

self.all_count = all_count
self.per_page_num = per_page_num

# 总页码
all_pager, tmp = divmod(all_count, per_page_num)
if tmp:
all_pager += 1
self.all_pager = all_pager

self.pager_count = pager_count
self.pager_count_half = int((pager_count - 1) / 2)

@property
def start(self):
return (self.current_page - 1) * self.per_page_num

@property
def end(self):
return self.current_page * self.per_page_num

def page_html(self):
# 如果总页码 < 11个:
if self.all_pager <= self.pager_count:
pager_start = 1
pager_end = self.all_pager + 1
# 总页码 > 11
else:
# 当前页如果<=页面上最多显示11/2个页码
if self.current_page <= self.pager_count_half:
pager_start = 1
pager_end = self.pager_count + 1

# 当前页大于5
else:
# 页码翻到最后
if (self.current_page + self.pager_count_half) > self.all_pager:
pager_end = self.all_pager + 1
pager_start = self.all_pager - self.pager_count + 1
else:
pager_start = self.current_page - self.pager_count_half
pager_end = self.current_page + self.pager_count_half + 1

page_html_list = []
# 添加前面的nav和ul标签
page_html_list.append('''
<nav aria-label='Page navigation' style="text-align: center;">
<ul class='pagination'>
''')
first_page = '<li><a href="?page=%s">首页</a></li>' % (1)
page_html_list.append(first_page)

if self.current_page <= 1:
prev_page = '<li class="disabled"><a href="#">上一页</a></li>'
else:
prev_page = '<li><a href="?page=%s">上一页</a></li>' % (self.current_page - 1,)

page_html_list.append(prev_page)

for i in range(pager_start, pager_end):
if i == self.current_page:
temp = '<li class="active"><a href="?page=%s">%s</a></li>' % (i, i,)
else:
temp = '<li><a href="?page=%s">%s</a></li>' % (i, i,)
page_html_list.append(temp)

if self.current_page >= self.all_pager:
next_page = '<li class="disabled"><a href="#">下一页</a></li>'
else:
next_page = '<li><a href="?page=%s">下一页</a></li>' % (self.current_page + 1,)
page_html_list.append(next_page)

last_page = '<li><a href="?page=%s">尾页</a></li>' % (self.all_pager,)
page_html_list.append(last_page)
# 尾部添加标签
page_html_list.append('''
</nav>
</ul>
''')
return ''.join(page_html_list)

自定义分页器使用

后端

from utils.mypage import Pagination
def get_book(request):
book_list = models.Book.objects.all()
current_page = request.GET.get("page",1)
all_count = book_list.count()
page_obj = Pagination(current_page=current_page,all_count=all_count,per_page_num=10)
page_queryset = book_list[page_obj.start:page_obj.end]
return render(request,'booklist.html',locals())

前端

<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
{% for book in page_queryset %}
<p>{{ book.title }}</p>
{% endfor %}
{{ page_obj.page_html|safe }}
</div>
</div>
</div>

python前后端自定义分页器

到此这篇关于python自定义分页器的实现的文章就介绍到这了!

Python 相关文章推荐
python实现linux下使用xcopy的方法
Jun 28 Python
python中reduce()函数的使用方法示例
Sep 29 Python
python利用OpenCV2实现人脸检测
Apr 16 Python
Python实现的本地文件搜索功能示例【测试可用】
May 30 Python
python提取包含关键字的整行数据方法
Dec 11 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
Feb 12 Python
python3读取csv文件任意行列代码实例
Jan 13 Python
基于Python fminunc 的替代方法
Feb 29 Python
django实现更改数据库某个字段以及字段段内数据
Mar 31 Python
jupyternotebook 撤销删除的操作方式
Apr 17 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
Jun 03 Python
Python可视化工具如何实现动态图表
Oct 23 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Python matplotlib多个子图绘制整合
Python之matplotlib绘制折线图
Python之matplotlib绘制饼图
Python线程池与GIL全局锁实现抽奖小案例
Python之Matplotlib绘制热力图和面积图
Python matplotlib绘制雷达图
You might like
使用Apache的rewrite技术
2006/06/22 PHP
php+mysql 实现身份验证代码
2010/03/24 PHP
php和editplus正则表达式去除空白行
2015/04/17 PHP
javascript预览上传图片发现的问题的解决方法
2010/11/25 Javascript
通过百度地图获取公交线路的站点坐标的js代码
2012/05/11 Javascript
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
js实现网页标题栏闪烁提示效果实例分析
2014/11/20 Javascript
原生js和jQuery写的网页选项卡特效对比
2015/04/27 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
2016/06/25 Javascript
老生常谈js动态添加事件--- 事件委托
2016/07/19 Javascript
Angularjs之filter过滤器(推荐)
2016/11/27 Javascript
获取jqGrid中选择的行的数据
2016/11/30 Javascript
利用JS对iframe父子(内外)页面进行操作的方法教程
2017/06/15 Javascript
详解基于Angular4+ server render(服务端渲染)开发教程
2017/08/28 Javascript
浅析JavaScript异步代码优化
2019/03/18 Javascript
微信小程序自定义波浪组件使用方法详解
2019/09/21 Javascript
小程序采集录音并上传到后台
2019/11/22 Javascript
Vue 使用typescript如何优雅的调用swagger API
2020/09/01 Javascript
JavaScript中条件语句的优化技巧总结
2020/12/04 Javascript
Python创建日历实例
2014/08/21 Python
python在控制台输出进度条的方法
2015/06/20 Python
Python如何import文件夹下的文件(实现方法)
2017/01/24 Python
Python中Django发送带图片和附件的邮件
2017/03/31 Python
Python基于numpy灵活定义神经网络结构的方法
2017/08/19 Python
python使用pil库实现图片合成实例代码
2018/01/20 Python
漂亮的Django Markdown富文本app插件的实现
2019/01/02 Python
python/Matplotlib绘制复变函数图像教程
2019/11/21 Python
python爬取豆瓣电影排行榜(requests)的示例代码
2021/02/18 Python
AmazeUI底部导航栏与分享按钮的示例代码
2020/08/18 HTML / CSS
大专应届生个人的自我评价
2013/11/21 职场文书
报关专员求职信范文
2014/02/22 职场文书
村级四风对照检查材料
2014/08/24 职场文书
实习单位指导教师评语
2014/12/30 职场文书
2016特色励志班级口号
2015/12/24 职场文书
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js