如何使用 Django 进行分页
Django自带的分页插件
现象这样的一个问题 ,分页是不是有规律的,是个什么样的规律?,
假如我们对每页的数据固定显示20条 是什么样的呢?
pageSize=20 每页多少条
page=7 页码
每页条数(pageSize) |
页码 |
每页数据 |
10 |
1 |
0-10 |
10 |
2 |
10-20 |
10 |
7 |
60-70 |
10 |
n |
(N-1)*pageSize-n*pageSize |
是不是这样?这就是最基本的分页方式
最基本的分页思路
def list_students(request):if request.method == "GET":page = request.GET.get("page") #获取页码page_size = request.GET.get("page_size") #获取每页条数if not page: #设置默认页码为1page = 1if not page_size: #设置默认每页5page_size = 5page = int(page) #防止url直接传过来字符串的页码page_size = int(page_size) #防止url直接传过来字符串的页码start = (page-1)*page_size #页码数据开头的索引end = page*page_size #页码数据结尾的索引students = Student.objects.order_by("id") #排序查询lenth = len(students) #获取长度page_num = lenth/page_size #计算页码范围if page_num != int(page_num): #判断页码是否为整数page_num += 1page_num = int(page_num)page_range = range(1,page_num+1) #页码范围data = students[start:end] #截取数据return render(request,"stu_list.html",{“data”:data,”page_range”:page_range})
使用django的分页插件进行分页
1、查询所有的数据
2、将数据传入分页的函数
3、调用具体页的数据
from django.core.paginator import Paginatordef list_students(request):if request.method == "GET":page = request.GET.get("page")page_size = request.GET.get("page_size")if not page:page = 1if not page_size:page_size = 5page = int(page)all_data = Student.objects.all() #查询所有的数据 --->1<---all_page = Paginator(all_data,int(page_size)) #将数据和单页条数放到Paginator里面 all_data = Student.objects.all() #查询所有的数据 --->2<---data = all_page.page(page) #获取具体页的数据 --->3<---return render(request,"stu_list.html",locals())
#基于分页实例
<P><p>+++++++++++++++++++++总条数数+++++++++++++++++++++++++++<br>{{ all_page.count }}</p><p>+++++++++++++++++++++总页数+++++++++++++++++++++++++++<br>{{ all_page.num_pages }}</p><p>+++++++++++++++++++++页码范围+++++++++++++++++++++++++++<br>{{ all_page.page_range }}</p>
</P>
#基于当前分页
<p><p>+++++++++++++++++++++当前页具体数据+++++++++++++++++++++++++++<br>{{ data.object_list }}</p><p>+++++++++++++++++++++当前页码+++++++++++++++++++++++++++<br>{{ data.number }}</p><p>+++++++++++++++++++++当前是否有上一页+++++++++++++++++++++++++++<br>{{ data.has_previous }}<br>+++++++++++++++++++++当前是否有下一页+++++++++++++++++++++++++++<br>{{ data.has_other_pages }}</p><p>+++++++++++++++++++++开始索引+++++++++++++++++++++++++++<br>{{ data.start_index }}<br>+++++++++++++++++++++结束索引+++++++++++++++++++++++++++<br>{{ data.end_index }}</p>
</p>
高级分页思路
Django查询本身是有惰性的,all并不是将所有的数据查询出来,只有在排序或者截取的时候,才会 具体查询。
查询 第1页到第5页,数据库只查询前50条数据,
查询 第6页的时候,会查询50-100。
首先编写实例代码
"""
page_size = 10
当我们查询第1-5页的时候,不对所有数据进行查询,只查询前50条,也就是5页
#page 1 select_range 0-50 return_range 1-10 r_n = 1 s_n = 1
#page 2 select_range 0-50 return_range 10-20 r_n = 2 s_n = 1
#page 3 select_range 0-50 return_range 20-30 r_n = 3 s_n = 1
#page 4 select_range 0-50 return_range 30-40 r_n = 4 s_n = 1
#page 5 select_range 0-50 return_range 40-50 r_n = 5 s_n = 1
#page 6 select_range 50-100 return_range 0-10 r_n = 1 s_n = 2
#page 7 select_range 50-100 return_range 10-20 r_n = 2 s_n = 2
#page 8 select_range 50-100 return_range 20-30 r_n = 3 s_n = 2
#page 9 select_range 50-100 return_range 30-40 r_n = 4 s_n = 2
#page n (s_n-1)*50-s_n*50
"""
total = list(range(103))while True:page = int(input(">>>"))if page%5 == 0:s_n = int(page/5)r_n = 5else:s_n = int(page / 5)+1r_n = page%5select_start = (s_n-1)*50select_end = s_n*50select_range = total[select_start:select_end]return_start = (r_n-1)*10return_end = r_n*10return_range = select_range[return_start:return_end]page_range = [3,4,5,6,7]if page <= 3:page_range = range(1,6)else:page_range = range(page-2,page+3)print("+++++++++++++++++++++++++++++++++++++++++++++++++++")print("当前的页码是:%s" % page)print("当前的大页码(s_n)是:%s" % s_n)print("当前的小页码是(r_n):%s" % r_n)print("查询的大范围(50条范围是):%s" % str(select_range))print("查询的小范围(10条范围是):%s" % str(return_range))print("反馈的页码是 :%s" % str(list(page_range)))print("+++++++++++++++++++++++++++++++++++++++++++++++++++")
然后将代码嵌入到我们的查询试图当中
def list_students(request):if request.method == "GET":page = request.GET.get("page")page_size = request.GET.get("page_size")onece_page = 5if not page:page = 1if not page_size:page_size = 5page = int(page)page_size =int(page_size)if page % onece_page == 0:s_n = int(page / onece_page)r_n = onece_pageelse:s_n = int(page / onece_page) + 1r_n = page % onece_pagetotal = Student.objects.all() # 查询所有的数据select_start = (s_n - 1) * onece_page*page_sizeselect_end = s_n * onece_page*page_sizeselect_range = total[select_start:select_end]return_start = (r_n - 1) * page_sizereturn_end = r_n * page_sizereturn_range = select_range[return_start:return_end]if page <= 3:page_range = range(1, 6)else:page_range = range(page - 2, page + 3)return render(request,"stu_list.html",{"data":return_range,"page_range":page_range})
如何使用 Django 进行分页相关推荐
- Django快速分页
分页 在web开发中,对大量的商品进行分页显示,是常见的需求,django对分页直接提供了现成的函数,让我们的开发更为快速便捷... 动图_Django快速分页 在后端(视图函数中) from dja ...
- Django—自定义分页
分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应该显示在页面上的数据在数据库表中的起始位置. 确定分页需求: 1. 每页显示的数据条数 2. 每页显示页号链接数 3. 上一页 ...
- Django实现分页功能
在本节中,我们将介绍 Django 为我们提供的高级模块,通过高级模块的学习,你会感受到 Django 的易用性如此之强,但是同时它又很复杂,所以在学习 Django 这样的重度框架的时候,我们一定要 ...
- Django 基础(12)-Django drf 分页查询(批量查询)、自定义分页器
文章目录 Django drf 分页查询(批量查询) PageNumberPagination:普通分页 Django 自定义分页器 自定义批量查询的返回结构 LimitOffsetPaginatio ...
- django session, 分页,数据库学习
一.http请求周期 浏览器(socket客户端):2.socket.connect(ip,端口)3.socket.send("规则: http协议GET请求:"GET /inde ...
- Django(part43)--分页
学习笔记,仅供参考,有错必纠 分页 分页是指在web页面有大量数据需要显示时,当一页的内容太多不利于阅读和不利于数据提取的情况下,可以分为多页进行显示: Django提供了一些类管理分页的数据 , 即 ...
- django之分页、cookie装饰器
一.分页代码如下 from django.utils.safestring importmark_safeclassPage:def __init__(self, current_page, data ...
- django的分页机制
翻译自官方文档 分页机制¶ Django 1.0 中分页机制和先前已经大不相同.它提供了一些类协助你把数据分页. 对应的文件为 django/core/paginator.py 举例¶ 类Pagina ...
- Django mysql 分页显示_django之分页显示
演示环境接上篇django. 说明: Django提供了一些类,来实现管理数据分页:Paginator对象.Page对象. 其中Paginator类对象介绍如下: Paginator(列表,int): ...
最新文章
- Flask一:安装初始,return方式,Request,Jinja2,session
- Pandas to_json() 中文乱码,转化为json数组
- python selenium处理JS只读(12306)
- python cgi库_《Python 数据库 GUI CGI编程》
- 外媒报道电子垃圾被运入中国
- 将一个包含有2层数据分组的表输出到EXCEL表里,并分组统计
- 编写函数实现列表平面化
- Windows学习总结(7)——学会CMD命令提示符的重要性
- 如何选择好的BI系统工具
- 写出一手烂代码的 19 条准则!
- 字节、字符输入输出流
- sql server2016数据库学习必备(保姆级教程)
- 2022谷粒学院BUG记录
- 百度AI开放平台情感分类
- 51nod1635 第K个幸运排列
- linux光标变成圆圈,Ubuntu字体美化之安装使用准圆字体(附图)
- Scrum 项目 4.0-5.0-约教网站开发(一)
- 字体基础知识:衬线字体和无衬线字体
- 人月神话(一)The Mythical Man-Month
- 工程升级技术的学习和使用
热门文章
- Cesium geojson数据的添加与移除
- ubuntu18.04上使用7z分卷压缩和解压
- Carsim与Simulink联仿Carsim找不到Matlab错误的解决方案,此前装过多个Matlab版本出现该问题可以尝试此方法
- 变频泵 计算机控制技术,变频泵站节约能耗的计算机控制技术浅析
- 数据库应用系统(二)需求分析
- 测试必会Linux命令
- (2020.12.7)初次web前端性能优化记录
- spotify电脑下载歌曲_26步,把Spotify音乐集成进SAP
- 梯度下降法(详细讲解)
- 正确使用uniapp搭配微信开发者工具自带的骨架屏功能,生成骨架屏