Djang内置分页和自定义分页
内置分页
views

from django.core.paginator import Paginator,Page,PageNotAnInteger def DJs_pages(request): nid=request.GET.get('nid') user_list=models.UserInfo.objects.all() paginator=Paginator(user_list,2) # .per_page: 每页显示条目数量 # .count: 数据总个数 # .num_pages:总页数 # .page_range:总页数的索引范围,如: (1,10),(1,200) 一次性显现有多少页显示多少个页码 # .page: page对象 if nid: a=paginator.page(nid) #显示第x页 a相当于一个列表里面是一页的内容 else: a=paginator.page(1) # has_next 是否有下一页 # next_page_number 下一页页码 # has_previous 是否有上一页 # previous_page_number 上一页页码 # object_list 分页之后的数据列表 # number 当前页 # paginator paginator对象 return render(request,'pages.html',{'a':a})
template

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 <h1>用户列表</h1> 9 <ul> 10 {%for row in a %} 11 <li>{{row.nid}}==={{row.user}}==={{row.age}}===={{row.ug.title}}</li> 12 {%endfor%} 13 14 </ul> 15 <div> 16 {%if a.has_next %} 17 <a href="/pages/?nid={{a.next_page_number}}">下一页</a> 18 {%endif%} 19 20 </div> 21 <div> 22 {%for row in a.paginator.page_range %} 23 <a href="/pages/?nid={{row}}">{{row}}</a> 24 {%endfor%} 25 26 </div> 27 </body> 28 </html>
自定义分页
views
1 from creat_tool.paging import PageInfo 2 3 def custom_page(request): 4 5 all_num=models.UserInfo.objects.all().count() 6 #page_num=math.ceil(all_num/3) 7 pageinfo=PageInfo(request.GET.get('page'),1,all_num,2,'/custom/') #(current_page,每页几个数据,一共多少数据,显示几个页码,url) 8 #current_page=request.GET.get('page') 9 #每页显示多少数据 10 #current_page=int(current_page) 11 #per_page=3 12 #0-3 3-6 6-9 13 user_list = models.UserInfo.objects.all()[pageinfo.start():pageinfo.end()]#[起始位置:结束位置] 14 return render(request, 'custom.html', {'user_list': user_list,'pageinfo':pageinfo})
class

import math class PageInfo(): def __init__(self,curret_page,per_page_ha_num,all_num,show_page,base_url): try: self.curret_page=int(curret_page) #1.将str数字转换为数字 2.不是数字的报错执行except except Exception as e: self.curret_page=1 self.per_page_ha_num=per_page_ha_num self.all_num=all_num self.all_page_num=math.ceil(self.all_num / self.per_page_ha_num) self.show_page=int(show_page/2) self.base_url=base_url def start(self): return (self.curret_page-1)*self.per_page_ha_num def end(self): return self.curret_page*self.per_page_ha_num def pagers(self): star = self.curret_page - self.show_page end = self.curret_page + self.show_page if star <= 0: star = 1 if end > self.all_page_num: end = self.all_page_num page_list = [] if self.curret_page <= 1: # prev = '<a href="">上一页</a>' prev = '<li><a href="#" aria-label="Previous"><span aria-hidden="true">«</span>上一页</a></li>' else: # prev = '<a href="%s?page=%s">上一页</a>' %(self.base_url,self.curret_page-1) prev = '<li><a href="%s?page=%s" aria-label="Previous"><span aria-hidden="true">«</span>上一页</a></li>' % ( self.base_url, self.curret_page - 1) page_list.append(prev) # for i in range(1,self.all_page_num+1): for i in range(star, end + 1): if i == self.curret_page: # temp='<a style="background-color:pink" href="%s?page=%s">%s</a>' %(self.base_url,i,i) temp = ' <li class="active" ><a href="%s?page=%s">%s</a></li>' % ( self.base_url, i, i) # <li class="active" > 强调当前页 else: temp = ' <li><a href="%s?page=%s">%s</a></li>' % (self.base_url, i, i) # temp = '<a href="%s?page=%s">%s</a>' % (self.base_url,i, i) page_list.append(temp) if self.curret_page >= self.all_page_num: # prev = '<a href=""> 下一页</a>' prev = '<li><a href="#" aria-label="Next"><span aria-hidden="true">«</span></a></li>' prev = ' <li><a href="#" aria-label="Next"><span aria-hidden="true">»</span>下一页</a></li>' else: # prev = '<a href="%s?page=%s">下一页</a>' % (self.base_url,self.curret_page + 1) prev = '<li><a href="%s?page=%s" aria-label="Next"><span aria-hidden="true">»</span>下一页</a></li>' % ( self.base_url, self.curret_page + 1) page_list.append(prev) return ''.join(page_list)
template

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="/static/bootstrap-3.4.1-dist/css/bootstrap.css"> </head> <body> <h1>用户列表</h1> <ul> {%for row in user_list %} <li>{{row.nid}}==={{row.user}}==={{row.age}}===={{row.ug.title}}</li> {%endfor%} </ul> <!-- {{pageinfo.pagers|safe}}--> <!-- 传类的对象过来,调用的方法就自动显示--> <nav aria-label="Page navigation"> <ul class="pagination"> {{pageinfo.pagers|safe}} </ul> </nav> </body> </html>
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术