自定义分页功能封装类:
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 = "实际应用案例:
# 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 = "
自定义分页功能
分页
-
{% for row in user_list %}
- {{ row.title }} | {{ row.username }} {% endfor %}



