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解析XML的几种常见方法的介绍
Apr 09 Python
Python实现的归并排序算法示例
Nov 21 Python
Python与人工神经网络:使用神经网络识别手写图像介绍
Dec 19 Python
python微信跳一跳游戏辅助代码解析
Jan 29 Python
浅析Python pandas模块输出每行中间省略号问题
Jul 03 Python
使用Python 正则匹配两个特定字符之间的字符方法
Dec 24 Python
Python实现Singleton模式的方式详解
Aug 08 Python
jenkins配置python脚本定时任务过程图解
Oct 29 Python
python使用pyecharts库画地图数据可视化的实现
Mar 25 Python
Python中logger日志模块详解
Aug 04 Python
python math模块的基本使用教程
Jan 16 Python
Python中的变量与常量
Nov 11 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Python matplotlib多个子图绘制整合
Python之matplotlib绘制折线图
Python之matplotlib绘制饼图
Python线程池与GIL全局锁实现抽奖小案例
Python之Matplotlib绘制热力图和面积图
Python matplotlib绘制雷达图
You might like
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
2011/04/23 PHP
php开启安全模式后禁用的函数集合
2011/06/26 PHP
采用thinkphp自带方法生成静态html文件详解
2014/06/13 PHP
PHP中使用sleep函数实现定时任务实例分享
2014/08/21 PHP
php实现插入排序
2015/03/29 PHP
Extjs学习笔记之一 初识Extjs之MessageBox
2010/01/07 Javascript
js FLASH幻灯片字符串中有连接符&的处理方法
2012/03/01 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
js图片翻书效果代码分享
2015/08/20 Javascript
微信小程序 wxapp视图容器 view详解
2016/10/31 Javascript
vue项目中做编辑功能传递数据时遇到问题的解决方法
2016/12/19 Javascript
5种JavaScript脚本加载的方式
2017/01/16 Javascript
JavaScript变量类型以及变量作用域详解
2017/08/14 Javascript
原生JS实现前端本地文件上传
2018/09/08 Javascript
JS实现li标签的删除
2019/04/12 Javascript
vue 实现移动端键盘搜索事件监听
2019/11/06 Javascript
JS实现扫码枪扫描二维码功能
2020/01/03 Javascript
python smtplib模块发送SSL/TLS安全邮件实例
2015/04/08 Python
python实现数值积分的Simpson方法实例分析
2015/06/05 Python
python脚本替换指定行实现步骤
2017/07/11 Python
Python实现excel转sqlite的方法
2017/07/17 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
解决python xx.py文件点击完之后一闪而过的问题
2019/06/24 Python
利用PyQt中的QThread类实现多线程
2020/02/18 Python
详解pandas获取Dataframe元素值的几种方法
2020/06/14 Python
python中selenium库的基本使用详解
2020/07/31 Python
利用python 读写csv文件
2020/09/10 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
python链表类中获取元素实例方法
2021/02/23 Python
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
屈臣氏乌克兰:Watsons UA
2019/10/29 全球购物
2014党员批评和自我批评思想汇报
2014/09/21 职场文书
党的群众路线教育实践活动对照检查材料(四风)
2014/09/27 职场文书
三方股东合作协议书范本
2014/09/28 职场文书
有趣的二维码:使用MyQR和qrcode来制作二维码
2021/05/10 Python
Python基础之进程详解
2021/05/21 Python