版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/g_optimistic/article/details/89092744
Django查询本身是有惰性的,all并不是将所有的数据查询出来,只有在排序或者截取的时候,才会 具体查询。
查询 第1页到第5页,数据库只查询前50条数据,
查询 第6页的时候,会查询50-100。
1.首先编写实例代码
具体情况不详细说明了,下面为你指路:
https://blog.csdn.net/g_optimistic/article/details/89088793
2.然后将代码嵌入到我们的查询代码当中
views,py
def list_student(request):
if request.method=='GET':
page=request.GET.get("page")
page_size=request.GET.get("page_size")
once_page=5
if not page:
page=1
if not page_size:
page_size=once_page
page=int(page)
page_size=int(page_size)
s_n = page / once_page
if page % once_page == 0:
s_n = int(page / once_page)
r_n = once_page
else:
s_n = int(page / once_page) + 1
r_n = page % once_page
total=Student.objects.all()#查询所有的数据
select_start = (s_n - 1) * once_page*page_size
select_end = s_n * once_page*page_size
select_range = total[select_start:select_end]
return_start = (r_n - 1) * page_size
return_end = r_n * page_size
return_range = select_range[return_start:return_end]
if page <= 3:
page_range = [1, 2, 3, 4, 5]
else:
page_range = range(page - 2, page + 3)
return render(request,'stu_list.html',{"data":r
stu_list.html
<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
<thead>
<tr>
<th>id</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>专业</th>
<th>班级</th>
</tr>
</thead>
<tbody>
{% for student in data %}
<tr>
<td>{{ student.id }}</td>
<td>{{ student.name }}</td>
<td>{{ student.age }}</td>
<td>{{ student.gender }}</td>
<td>{{ student.classes }}</td>
<td>{{ student.grade }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<ul class="pagination">
{% for page in page_range %}
<li class="paginate_button page-item active">
<a href="/stu_list/?page={{ page }}" class="page-link">
{{ page }}
</a>
</li>
{% endfor %}
</ul>
urls.py
from Student.views import list_student
urlpatterns=[
path('list_stu/',list_student),
]