我是靠谱客的博主 玩命便当,最近开发中收集的这篇文章主要介绍页面分页功能---自定义封装(python),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

自定义分页功能封装类:

class PageInfo(object):
''' 自定义分页功能 '''
def __init__(self, current_page, all_count, per_page, page_url, show_page=7):
try:
self.current_page = int(current_page)
# 想要切换的页码数
except Exception as e:
self.current_page = 1
# print(current_page, all_count, per_page, page_url)
self.all_count = all_count
# 数据的总行数
self.per_page = per_page
# 页面每页显示总条数
self.page_url = page_url
# 页面的url
self.show_page = show_page
# 配置页面行页码显示个数
# 获取所有的页码数
a, b = divmod(all_count, per_page)
if b:
a += 1
self.all_pager = a
# 所有的页码数
def start(self):
''' 对数据进行切分,获取每页数据的开始位置
'''
return (self.current_page-1) * self.per_page
def end(self):
''' 对数据进行切分,获取每页数据的结束位置
'''
return self.current_page * self.per_page
def pager(self):
''' 处理页码,直接传入页面模板中使用 '''
page_list = []
# 获取点前页码的左右页码个数
haif = int((self.show_page-1)/2)
# 处理页码不同情况
if self.all_pager < self.show_page:
# 1.如果数据总页码 < 设置的show_page 情况
begin = 1
stop = self.all_pager + 1
# 2.如果数据总页数 > 设置的show_page 情况
else:
if self.current_page <= haif:
# 3.如果当前页 <= haif 情况,就固定显示页码
begin = 1
stop = self.show_page + 1
else:
if self.current_page + haif > self.all_pager:
# 4.如果当前选中的页码 + 其他显示的页码 > 总页码 情况
# begin = self.current_page - haif
# 方式一:结尾时只显示部分页码
begin = self.all_pager - self.show_page + 1
# 方式二:结尾时固定显示show_page个页码
stop = self.all_pager + 1
else:
begin = self.current_page - haif
stop = self.current_page + haif + 1
# 加上一页标签
if self.current_page == 1:
previous_page = "<li><a
href='#'>上一页</a></li>"
else:
previous_page = "<li><a
href='{0}?page={1}'>上一页</a></li>".format(self.page_url, self.current_page-1)
page_list.append(previous_page)
# 向页面显示页码数
for i in range(begin, stop):
if i == self.current_page:
temp = "<li class='active'><a href='{0}?page={1}'>{1}</a></li>".format(self.page_url, i)
else:
temp = "<li><a href='{0}?page={1}'>{1}</a></li>".format(self.page_url, i)
page_list.append(temp)
# 加下一页标签
if self.current_page == self.all_pager:
next_page = "<li><a
href='#'>下一页</a></li>"
else:
next_page = "<li><a
href='{0}?page={1}'>下一页</a></li>".format(self.page_url, self.current_page+1)
page_list.append(next_page)
return ''.join(page_list)

实际应用案例:

# urls.py
from django.urls import re_path
from app01 import views
urlpatterns = [
re_path('custom.html$', views.custom), ]
# app01views.py
from django.views import View
from django.shortcuts import render
from app01 import models
def custom(request):
# 用户当前想要访问的页码
current_page = request.GET.get('page')
# current_page = int(current_page)
all_count = models.Test01.objects.all().count()
# 数据的总个数
# 调用分页类
page_info = PageInfo(current_page, all_count, 10, '/custom.html')
# 数据库中获取需要的数据
user_list = models.Test01.objects.all()[page_info.start():page_info.end()]
return render(request, 'custom.html', {'user_list': user_list, 'page_info': page_info})
class PageInfo(object):
'''分页功能 '''
def __init__(self, current_page, all_count, per_page, page_url, show_page=11):
try:
self.current_page = int(current_page)
# 想要切换的页码数
except Exception as e:
self.current_page = 1
print(current_page, all_count, per_page, page_url)
self.all_count = all_count
# 数据的总行数
self.per_page = per_page
# 页面每页显示总条数
self.page_url = page_url
# 页面的url
self.show_page = show_page
# 配置页面行页码显示个数
# 获取所有的页码数
a, b = divmod(all_count, per_page)
if b:
a += 1
self.all_pager = a
# 所有的页码数
def start(self):
''' 对数据进行切分,获取每页数据的开始位置
'''
return (self.current_page-1) * self.per_page
def end(self):
''' 对数据进行切分,获取每页数据的结束位置
'''
return self.current_page * self.per_page
def pager(self):
''' 处理页码,直接传入页面模板中使用 '''
page_list = []
haif = int((self.show_page-1)/2)
# 获取点前页码的左右页码个数
# 处理页码不同情况
# 1.如果数据总页码 < 设置的show_page 情况
if self.all_pager < self.show_page:
begin = 1
stop = self.all_pager + 1
# 2.如果数据总页数 > 设置的show_page 情况
else:
if self.current_page <= haif:
# 3.如果当前页 <= haif,就固定显示页码
begin = 1
stop = self.show_page + 1
else:
if self.current_page + haif > self.all_pager:
# 4.如果当前页码+右边的页码 > 总页码
begin = self.all_pager - self.show_page + 1
stop = self.all_pager + 1
else:
begin = self.current_page - haif
stop = self.current_page + haif + 1
# 加上一页按钮
if self.current_page == 1:
previous_page = "<li><a
href='#'>上一页</a></li>"
else:
previous_page = "<li><a
href='{0}?page={1}'>上一页</a></li>".format(self.page_url, self.current_page-1)
page_list.append(previous_page)
# 向页面显示页码数
for i in range(begin, stop):
if i == self.current_page:
temp = "<li class='active'><a href='{0}?page={1}'>{1}</a></li>".format(self.page_url, i)
else:
temp = "<li><a href='{0}?page={1}'>{1}</a></li>".format(self.page_url, i)
page_list.append(temp)
# 加下一页按钮
if self.current_page == self.all_pager:
next_page = "<li><a
href='#'>下一页</a></li>"
else:
next_page = "<li><a
href='{0}?page={1}'>下一页</a></li>".format(self.page_url, self.current_page+1)
page_list.append(next_page)
return ''.join(page_list)
<!-- custom.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>自定义分页功能</title>
<!--
<link rel="stylesheet" href="/static/plugins/bootstrap-3.4.1-dist/css/bootstrap.css">
-->
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.4.1/css/bootstrap.min.css">
</head>
<body>
<h1>分页</h1>
<ul>
<!-- 需要展示的数据 -->
{% for row in user_list %}
<li> {{ row.title }} | {{ row.username }}</li>
{% endfor %}
</ul>
<!-- 获取类方法,内容直接渲染模板中 [safe]表示告诉模板此写法安全(不建议这样写) -->
<nav aria-label="Page navigation">
<ul class="pagination">
{{ page_info.pager | safe }}
</ul>
</nav>
</body>
</html>

最后

以上就是玩命便当为你收集整理的页面分页功能---自定义封装(python)的全部内容,希望文章能够帮你解决页面分页功能---自定义封装(python)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部