python实现分页插件
class Pages: def __init__(self, current_page, data_count, per_page_count=10, pager_num=7):#pager_num 这是页码 self.current_page = current_page self.data_count = data_count self.per_page_count = per_page_count self.pager_num = pager_num pass @property def start(self): return (self.current_page-1) * self.per_page_count @property def end(self): return self.current_page * self.per_page_count @property def all_count(self): v, s = divmod(self.data_count, self.per_page_count) if s > 0: v += 1 return v def page_str(self, base_url): pg = [] if self.all_count < self.pager_num: start_index = 1 ent_index = self.all_count else: if self.current_page < (self.pager_num + 1) / 2: # 最前面的数,当小于6时会出现的一种情况 start_index = 1 ent_index = self.pager_num elif self.current_page + 5 > self.all_count: # 最后面的数,当加上5大于总页数时会出现的一种情况 start_index = self.all_count - self.pager_num + 1 ent_index = self.all_count else: start_index = self.current_page - ((self.pager_num - 1) / 2) ent_index = self.current_page + ((self.pager_num - 1) / 2) pre_page = "<a href='%s?p=%s' class='page'>上一页</a>" % \ (base_url, self.current_page - 1 if self.current_page > 1 else 1) for a in range(int(start_index), int(ent_index)+1): if a == self.current_page: temp = "<a href='%s?p=%s' class='page active'>%s</a>" % (base_url, a, a) pg.append(temp) else: temp = "<a href='%s?p=%s' class='page'>%s</a>" % (base_url, a, a) pg.append(temp) next_page = "<a href='%s?p=%s' class='page'>下一页</a>" % \ (base_url, self.current_page + 1 if self.current_page < self.all_count else self.all_count) jump = """ <input id="jump" type="text"><button onclick="jump(this)">跳转</button> <script> function jump(node){ location.href= '%s?p='+ $("#jump").val() } </script> """ % base_url page_str = pre_page+"".join(pg)+next_page+jump return page_str
使用例子:
def show_vedio(request): current_page = request.GET.get("p", 1) current_page = int(current_page) page_obj = Pages(current_page, len(LIST)) lists = LIST[page_obj.start:page_obj.end] return render(request, "blogs/internet/show_video.html", {"list": lists, "page": page_obj.page_str("/blogs/video/")})
前端:
1 2 3 4 5 6 7 8 9 | {{ "分页 " |defined_filter: "您会做 了吗!" }} <ul> { % for i in list % } <li>{{ i }}< / li> { % endfor % } < / ul> {{ page|safe }} |
大道三千,条条皆可证道。道心不可失。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现