Python网络编程10----django分页

django中提供便捷的分页服务,主要通过 Pagination来实现的,详细可以参考 Django文档 ,通过简单设立每页显示的数量,来自动化获得分页object_list,先来看看调用方式,借用文档里面的例子:

>>> from django.core.paginator import Paginator
>>> objects = ['john', 'paul', 'george', 'ringo']
>>> p = Paginator(objects, 2)#新建分页,参数为所有的obj,和每页显示数量
>>> p.count#所有的obj的数量
4
>>> p.num_pages#分出来的页数
2
>>> p.page_range#页数的列表
[1, 2]
>>> page1 = p.page(1)#得到第一页
>>> page1
<Page 1 of 2>
>>> page1.object_list#第一页的obj列表
['john', 'paul']

>>> page2 = p.page(2)
>>> page2.object_list
['george', 'ringo']
>>> page2.has_next()#是否有下一页
False
>>> page2.has_previous()#是否有前一页
True
>>> page2.has_other_pages()#是否有其他页
True
>>> page2.next_page_number()#下一页的地址,这里最好判断是否有,不然会异常
Traceback (most recent call last):
...
EmptyPage: That page contains no results

在项目中使用分页器

def my_pagination(queryset,pageNum, after_range_num = 5,bevor_range_num = 4):
    # 获取页码
    pageNum = common.try_int(pageNum, 1)
    # 创建分页器
    paginator = Paginator(queryset, 5)
    # 获取目标页上的主机列表对象
    hostsList = common.try_getPage(paginator, pageNum)
    # 统计总共有多少主机
    count = paginator.count
    after_range_num, bevor_range_num = 5, 4
    if pageNum >= after_range_num:
        page_range = paginator.page_range[pageNum - after_range_num:pageNum + bevor_range_num]
    else:
        page_range = paginator.page_range[0:pageNum + bevor_range_num]
    return hostsList,count,page_range

对应的html为


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #Pageing A
        {
         background-color:darkgreen;
            border: 1px solid White;
            text-decoration: none;color:White;
            padding:.1em .6em .2em .6em;
        }
        #Pageing A.selected{background-color: coral}
    </style>
</head>
<body>
<h1>主机信息</h1>
<p>总主机数为{{ count }}</p>

<table border="2">
{% for item in data %}
    <tr>
    <td>{{ item.hostname }}</td>
    <td>{{ item.ip }}</td>
    </tr>

{% endfor %}
</table>

<div id="Pageing">
    {% if  data.has_previous %}
    <a href="{{ data.previous_page_number }}">前一页</a>
    {% else %}
    <a>前一页</a>
    {% endif %}

    {% for p in page_range %}
      {% ifequal p  data.number %}
      <a class='selected'>{{p}}</a>
      {% else %}
      <a href="{{p}}" title="第{{p}}页">{{p}}</a>
      {% endifequal %}
    {% endfor %}

    {% if data.has_next %}
    <a href="{{ data.next_page_number }}">后一页</a>
    {% else %}
     <a>后一页</a>
    {% endif %}
</div>
</body>
</html>

对应的view函数是

def index(request,pageNum):
    queryset=Host.objects.all()
    hostsList,count,page_range=my_pagination(queryset,pageNum)
    #pages=Pager(pageNum,count)

    return render(request,"index2.html",{"data":hostsList,"count":count,"page_range":page_range})

这里写图片描述

下面是分页练习的源码。
http://download.csdn.net/detail/a359680405/9525271
其中app01是没有使用Pagination实现的分页。
app02是使用Pagination实现的分页

本文网址:http://blog.csdn.net/a359680405/article/details/51454519

上一篇:Python网络编程09—-Django表单
下一篇:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值