from django.utils.safestring import mark_safe
from django.http.request import QueryDict
class Pagetions:
def __init__(self, curPage, all_data, params=None, page_nums=10, max_show=9):
'''
:param curPage: # 当前页数
:param all_data: # 数据总量
:param page_nums: # 每页多少条
:param max_show: # 显示总共几页
'''
if not params:
params=QueryDict(mutable=True)
self.params=params
try:
curPage = int(curPage)
if curPage < 0:
curPage = 1
except Exception:
curPage = 1
self.curPage = curPage
self.all_data = all_data
total_num, more = divmod(all_data, page_nums)
if more:
total_num += 1
half_show = max_show // 2
if total_num <= max_show:
page_start = 1
page_end = total_num
else:
if self.curPage - half_show <= 0:
page_start = 1
page_end = max_show
elif self.curPage + half_show > total_num:
page_start = total_num - max_show + 1
page_end = total_num
else:
page_start = self.curPage - half_show
page_end = self.curPage + half_show
self.page_start = page_start
self.page_end = page_end
self.total_num = total_num
self.start = (self.curPage - 1) * page_nums
self.end = self.curPage * page_nums
def page_html(self):
'''
## 此方法用于生成 前一页 和 后一页
:return:
'''
li_list = []
if self.curPage == 1:
li_list.append(
'<li class="disabled"><a aria-label="Previous"> <span aria-hidden="true">«</span></a></li>'
)
else:
self.params['page']=self.curPage-1
li_list.append(
f'<li><a href="?{self.params.urlencode()}" aria-label="Previous"> <span aria-hidden="true">«</span></a></li>'
)
for el in range(self.page_start, self.page_end + 1):
self.params['page']=el
if el == self.curPage:
li_list.append('<li class="active"><a href="?{}">{}</a></li>'.format(self.params.urlencode(), el))
else:
li_list.append('<li><a href="?{}">{}</a></li>'.format(self.params.urlencode(), el))
if self.curPage <= self.total_num:
li_list.append(
'<li class="disabled"><a aria-label="Previous"> <span aria-hidden="true">»</span></a></li>'
)
else:
self.params['page']=self.curPage+1
li_list.append(
'<li><a href="?{}" aria-label="Previous"> <span aria-hidden="true">»</span></a></li>'.format(self.params.urlencode())
)
return mark_safe(''.join(li_list))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?