django高级分页策略

版权声明:本文为博主原创文章,未经博主允许不得转载 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),
    
]

3.效果

猜你喜欢

转载自blog.csdn.net/g_optimistic/article/details/89092744