1.原理:
Django查询本身是有惰性的,all并不是将所有的数据查询出来,只有在排序或者截取的时候,才会 具体查询。
查询 第1页到第5页,数据库只查询前50条数据,
查询 第6页的时候,会查询50-100。
首先编写实例代码
page_size=10
当我们查询第一到五页的时候,不对其他数据进行查询,只查询前50条数据
也就是5页,每页显示10条数据
2.效果
当我们查询第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
page=n select_range:(s_n-1)*50-s_n*50 return_range:40-50
# //整除 %取余
3.代码实现
total = range(1000)
while True:
page = int(input(">>>"))
s_n = page / 5
if page % 5 == 0:
s_n = int(page / 5)
r_n = 5
else:
s_n = int(page / 5) + 1
r_n = page % 5
print(s_n)
print("%s-%s"%((s_n-1)*50,s_n*50))
select_start=(s_n-1)*50
select_end=s_n*50
select_range=total[select_start:select_end]
return_start=(r_n-1)*10
return_end=r_n*10
return_range=select_range[return_start:return_end]
page_range=[3,4,5,6,7]
if page<=3:
page_range=[1,2,3,4,5]
else:
page_range=range(page-2,page+3)
print("+++++++++++++++++++++++++++++++++++++++++")
print("当前的页码是:%s"%page)
print("查询的大页码是:%s"%s_n)
print("查询的小页码是:%s"%r_n)
print("查询的大范围(50条范围是):%s"%str(select_range))
print("查询的大范围(50条范围是):%s"%str(list(select_range)))
print("查询的小范围(10条范围是):%s"%str(return_range))
print("查询的小范围(10条范围是):%s"%str(list(return_range)))
print("反馈的页面是:%s"%str(list(page_range)))
执行结果:
将上片文章中的代码进行加工,实现页面只显示五个页码,并且当前页码发生改变前后五个页码也发生改变,并且当前页面数据也随之发生改变.
首先编写视图文件:
def list_student(request):
if request.method == 'GET':
page=request.GET.get('page')
page_size = request.GET.get('page_size')
if not page:
page = 1
if not page_size:
page_size = 5
page = int(page)
page_size = int(page_size)
start = (page-1)*page_size
end = page*page_size
students = Students.objects.order_by('id')
length = len(students)
page_num = length/page_size
if page_num != int(page_num):
page_num+=1
page_num = int(page_num)
page_range = range(1,page_num+1)
data = students[start:end]
return render(request,'student_list.html',{'data':data,'page_range':page_range})
配置对应路由:
from Student.views import *
urlpatterns +=[
path('reg_stu/', register_student),
path('reg_stu_a/',register_student_ajax),
path('reg_stu_d/',areg_student_data),
path('stu_list/',list_student),
path('reg_stu_text/',register_student_text),
path('list_student/',list_students),
path('studentList',studentList)
]
效果展示:
第一页:
第五页: