python-Django原生分页方式

我爱海鲸 2021-04-18 00:53:06 python

简介使用Django切片的方式进行分页

1、接上一篇文章,python-Django展示前台首页


2、使用python的切片的方式进行分页,列如:

在Python Console控制台中输入:

第一页:

a = [1,2,3,4,5,6,7,8]

a[0:2]

输出:[1,2]

第二页:

a[2:4]

输出:[3,4]

第三页:

a[4:6]

输出:[5,6]

.。。。以此类推,如图:

undefined

3、在控制中输入:

from movie.models import Movie

Movie.objects.all()

输出发现返回的值为一个列表,如图:

undefined

同理可得:

#  页码   num   每页显示记录数 size

#          1    2   [0:2]

#          2    2   [2:4]

#          3    2   [4:6]

#         num   size [((num-1)*size):(num*size)]

4、编写分页的逻辑:

def page(num,size=20):

    #接收当前页码数

    num = int(num)


    #总记录数

    totalRecords = Movie.objects.count()

    #总页数

    totalPages = int(math.ceil(totalRecords*1.0/size))



    #判断是否越界

    if num <1:

        num = 1


    if num >totalPages:

        num = totalPages


    #计算出每页显示的记录

    movies = Movie.objects.all()[((num-1)*size):(num*size)]


    return movies,num

该方法返回的值为数据的对象和当前的页码数,如图:

undefined

5、编写请求的逻辑:

def index_view(request):


    #接收请求参数  num

    num = request.GET.get('num',1)

    

    #处理分页请求

    movies,n = page(num)


    #上一页的页码

    pre_page_num = n-1

    # 下一页的页码

    next_page_num = n+1



    return render(request,'index01.html',{'movies':movies,'pre_page_num':pre_page_num,'next_page_num':next_page_num})

如图:

undefined

6、编写前台逻辑:

   <div id="content" >

        <ul class="clearfix">

            {% for movie in movies %}

                <li>

                   <a href="{{ movie.mlink }}"><img src="https://www.haijin.xyz/HaijinWeblogPhoto/uploadFiles/QQ%E6%88%AA%E5%9B%BE20200316130103.png" style="height:136px;width: 125px"/></a>

                    <h1 class="h1">{{ movie.mname }}</h1>

                    <span class="tip">{{ movie.mdesc }}</span>

                </li>

            {% endfor %}




        </ul>

    </div>

    <div>

        <a href="/movie/?num={{ pre_page_num }}">上一页</a>

        <a href="/movie/?num={{ next_page_num }}">下一页</a>

    </div>

如图:

undefined

7、重启项目,访问http://127.0.0.1:8000/movie/,如图:

undefined



你好:我的2025