Django分页(一)
Django分页(一)
手动实现简单分页
HTML

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div class="header"> <div> {% for user in user_list %} <li>{{ user.name }} {{ user.age }} </li> {% endfor %} {{ prev_page }}<a href="/index?p={{ prev_page }}">上一页</a> {{ next_page }}<a href="/index?p={{ next_page }}">下一页</a> </div> </div> </body> </html>
Views代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | from django.shortcuts import render,HttpResponse,redirect from blog.models import * from django.views import View # Create your views here. USER_LIST = [] for i in range ( 888 ): temp = { 'name' : 'root' + str (i), 'age' :i} USER_LIST.append(temp) per_page_count = 10 # 定义每页要显示多少行数据 def get_index(request): current_page = request.GET.get( 'p' ) #获取客户端传过来的参数,得到翻到哪一页 current_page = int (current_page) # 字符--〉数字 start = (current_page - 1 ) * per_page_count # 定义从哪一行开始 end = current_page * per_page_count # 定义数据在哪一行结束 data = USER_LIST[start:end] # 对数据进行切片 # p=1 # 0,10 0-9 # p=2 # 10,20 10-19 <br> #上一页 prev_page = current_page - 1 #下一页 next_page = current_page + 1 return render(request, "index.html" ,{ 'user_list' :data, 'prev_page' :prev_page, 'next_page' :next_page}) |
Django分页简单使用
在html文件下创建include目录,然后把分页功能代码放入其中
使用include引入功能html文件
功能html文件如下:
1 2 3 4 5 6 7 8 9 | { % if posts.has_previous % } <a href = "?p={{ posts.previous_page_number }}" >Previous< / a> { % endif % } <span class = "current" > Page {{ posts.number }} of {{ posts.paginator.num_pages }}. < / span> { % if posts.has_next % } <a href = "?p={{ posts.next_page_number }}" > Next < / a> { % endif % } |
HTML

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div class="header"> <div> <ul> {% for user in posts.object_list %} <li>{{ user.name }} {{ user.age }} </li> {% endfor %} </ul> {% if posts.has_previous %} <a href="?p={{ posts.previous_page_number }}">Previous</a> {% endif %} <span class="current"> Page {{ posts.number }} of {{ posts.paginator.num_pages }}. </span> {% if posts.has_next %} <a href="?p={{ posts.next_page_number }}">Next</a> {% endif %} <!--{% include 'include/page1.html' %}--> </div> </div> </body> </html>
View代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | from django.shortcuts import render,HttpResponse,redirect from blog.models import * from django.views import View # Create your views here. USER_LIST = [] for i in range ( 888 ): temp = { 'name' : 'root' + str (i), 'age' :i} USER_LIST.append(temp) per_page_count = 10 # 定义每页要显示多少行数据 from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger def get_index1(request): #django分页主要有两个对象:paginator与page对象 #如果这里是表的话models.表名.objects.all()来操作 #将表里所有的内容都放进去,每页显示10条记录 paginator = Paginator(USER_LIST, 10 ) #实例化Paginator #全部数据:USER_LIST #per_page:每页显示条目数量 #count:数据据总个数 #num_pages:总页数 #page_range:总页数的索引范围 #page:page对象(是否有上一页,是否有下一页) current_page = request.GET.get( 'p' ) current_page = int (current_page) # 字符--〉数字 print (current_page) try : posts = paginator.page(current_page) # has_next 是否有下一页 # next_page_number 下一页页码 # has_previous 是否有上一页 # previous_page_number 上一页页码 # object_list 分页之后的数据列表 # number 当前页 # paginator paginator对象 # print(posts.object_list) except PageNotAnInteger: #如果输入内容不为整数,传入页面1 posts = paginator.page( 1 ) except EmptyPage: posts = paginator.page(paginator.num_pages) return render(request, 'index1.html' , { 'posts' : posts}) |
Django分页自定义使用
功能html
1 2 3 4 5 6 7 8 9 10 11 | {% if posts.has_previous %} < a href="?p={{ posts.previous_page_number }}">Previous</ a > {% endif %} {% for i in posts.paginator.page_num_range %} < a href="?p={{ i }}">{{ i }}</ a > {% endfor %} {% if posts.has_next %} < a href="?p={{ posts.next_page_number }}">Next</ a > {% endif %} |
HTML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <! DOCTYPE html> < html lang="en"> < head > < meta charset="UTF-8"> < title >Title</ title > </ head > < body > < div class="header"> < div > < ul > {% for user in posts.object_list %} < li >{{ user.name }} {{ user.age }} </ li > {% endfor %} </ ul > {% include 'include/page1.html' %} </ div > </ div > </ body > </ html > |
View代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | class CustomPaginator(Paginator): def __init__( self , current_page, max_pager_num, * args, * * kwargs): """ :param current_page: 当前页 :param max_pager_num:最多显示的页码个数 :param args: :param kwargs: :return: """ self .current_page = int (current_page) self .max_pager_num = max_pager_num super (CustomPaginator, self ).__init__( * args, * * kwargs) def page_num_range( self ): # 当前页面 # self.current_page # 总页数 # self.num_pages # 最多显示的页码个数 # self.max_pager_num print ( 1 ) if self .num_pages < self .max_pager_num: return range ( 1 , self .num_pages + 1 ) print ( 2 ) part = int ( self .max_pager_num / 2 ) if self .current_page - part < 1 : return range ( 1 , self .max_pager_num + 1 ) print ( 3 ) if self .current_page + part > self .num_pages: return range ( self .num_pages + 1 - self .max_pager_num, self .num_pages + 1 ) print ( 4 ) return range ( self .current_page - part, self .current_page + part + 1 ) def get_index2(request): current_page = request.GET.get( 'p' ) current_page = int (current_page) paginator = CustomPaginator(current_page, 11 , USER_LIST, 10 ) # per_page: 每页显示条目数量 # count: 数据总个数 # num_pages:总页数 # page_range:总页数的索引范围,如: (1,10),(1,200) # page: page对象 try : posts = paginator.page(current_page) # has_next 是否有下一页 # next_page_number 下一页页码 # has_previous 是否有上一页 # previous_page_number 上一页页码 # object_list 分页之后的数据列表 # number 当前页 # paginator paginator对象 print (posts.object_list) except PageNotAnInteger: posts = paginator.page( 1 ) except EmptyPage: posts = paginator.page(paginator.num_pages) return render(request, 'index2.html' , { 'posts' : posts}) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?