python自动化运维学习第二十三天--django分页

分页就是页面显示的内容过多,分多页来显示,如论坛的帖子、电子书籍等
views.py页面分页配置如下

from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger
def page(request):
    user_list = models.UserInfo.objects.all().order_by("id")     #获取的所有对象使用id排序
    p = Paginator(user_list, 2)                                  #创建一个分页器对象,2个内容作为一页

    print("数据总数:", p.count)                                   #获取总共多少数据对象
    print("数据页数:", p.num_pages)                               #获取总页码数
    print("range(x,y):", p.page_range)                          #页码的区间
    print("是否有下一页:", p.page(2).has_next())                  #第二页是否有下一页
    print("是否有上一页:", p.page(2).has_previous())              #第二页是否有上一页
    print("是否有其他页:", p.page(2).has_other_pages())           #第二页是否有其他页
    print("下一页的页码:", p.page(2).next_page_number())          #第二页下一页的页码
    print("上一页的页码:", p.page(2).previous_page_number())      #第二页上一页的页码

    page_num = int(request.GET.get('page',1))                   #得到请求的页码数,默认是第一页(需要转换为int类型)

    try:
        userobj_list = p.page(page_num)                         #获取该页码数的数据对象集
    except PageNotAnInteger:
        userobj_list = p.page(1)                                #如果获取的页码数不是int类型跳到第一页
    except EmptyPage:
        userobj_list = p.page(p.num_pages)                      #如果没有获取到页码数跳到最后一页

    return render(request,"page.html",locals())

page.html里的代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>users</title>
</head>
<body>
<table>
    <tr>
        <th>用户名</th>
        <th>密码</th>
        <th>姓名</th>
    </tr>
    {% for item in userobj_list %}
       <tr>
            <th>{{ item.username }}</th>
            <th>{{ item.password }}</th>
            <th>{{ item.name }}</th>
        </tr>
    {% endfor %}
    
 <ul class="pagination" id="pager">
        <tr>
            <th>
                 {% if userobj_list.has_previous %}     {#判断是否有上一页#}
                    <li class="previous"><a href="/page/?page={{ userobj_list.previous_page_number }}">上一页</a></li>        {#有上一页显示,用a标签发送上一页的页码数#}
                 {% else %}
                    <li class="previous disabled"><a href="#">上一页</a></li>   {#没有上一页不显示#}
                 {% endif %}
            </th>
                 {% for num in p.page_range %}       {#循环显示所有的页码#}
                     <th>
                     {% if num == page_num %}
                       <li class="item active"><a href="/page/?page={{ num }}">{{ num }}</a></li>
                     {% else %}
                       <li class="item"><a href="/page/?page={{ num }}">{{ num }}</a></li>
                     {% endif %}
                     </th>
                 {% endfor %}
            <th>
                 {% if userobj_list.has_next %}
                    <li class="next"><a href="/page/?page={{ userobj_list.next_page_number }}">下一页</a></li>
                 {% else %}
                    <li class="next disabled"><a href="#">下一页</a></li>
                 {% endif %}
            </th>
        </tr>
 </ul>
</table>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值