分页数据Django零碎知识(13):分页功能

本文朋友在上海喝咖啡的时候突然想到的...之前就有想写几篇关于分页数据的文章,所以回家到以后就奋笔疾书的写出来发布了

    二、分页Paginator的解释

 1 >>> from django.core.paginator import Paginator
 2 >>> objects=['C#','Java','Python','JavaScript','PHP']
 3 >>> p =Paginator(objects,2)    #每页两条数据的一个分页器
 4 >>> p.count  #数据总数
 5 5
 6 >>> p.num_pages  #总页数
 7 3
 8 >>> p.page_range   #页码的表列
 9 [1, 2, 3]
10 >>> page1 = p.page(1)  #第1页
11 >>> page1
12 <Page 1 of 3>
13 >>> page1.object_list  #第1页的数据
14 ['C#', 'Java']
15 >>> page2=p.page(2)  #第2页
16 >>> page2
17 <Page 2 of 3>
18 >>> page2.object_list   #第2页的数据
19 ['Python', 'JavaScript']
20 >>> page2.has_next() #是不是有后一页
21 True
22 >>> page2.has_previous() #是不是有前一页
23 True
24 >>> page2.has_other_pages()  #是不是有其他页
25 True
26 >>> page2.next_page_number() #后一页的页码
27 3
28 >>> page2.previous_page_number() #前一页的页码
29 1
30 >>> page2.start_index() # 本页第一条记载的序数(从1开始)
31 3
32 >>> page2.end_index()  # 本页最后录一条记载的序数(从1开始)
33 4
34 >>> p.page(0)               #错误的页,抛出异常
35 ...EmptyPage: That page number is less than 1
36 >>> p.page(3)               #错误的页,抛出异常
37 ...EmptyPage: That page contains no results

接下来我们在视图数函中用使分页

    每日一道理
我拽着春姑娘的衣裙,春姑娘把我带到了绿色的世界里。
def listing(request):
    """
    功能说明: 分页示显
    -----------------------------------------------------------------------------
    改修人                改修时光                改修原因
    -----------------------------------------------------------------------------
    admin               2013-04-16          
    """
    news=New.objects.all().order_by('-id')
    paginator =Paginator(news,5)             #Show 5 news per page
    #定确分页求请是一个整数,如果不是则付交第一页
    try:
        page=int(request.GET.get('page',1))
    except VauleError:
        page=1
    #如果分页求请过超范围,则付交最后一页
    try:
        contacts=paginator.page(page)
    except (EmptyPage,InvalidPage):
        contacts = paginator.page(paginator.num_pages)
    return render_to_response('list.html',{'contacts':contacts})

在用使之前一定要住记导入:

from django.core.paginator import Paginator,EmptyPage,InvalidPage #导入分页模型

通过在url配置以后:

  (r'^listing/$','login.views.listing'),    #分页

接下来就是写模板了:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
{% for contact in contacts.object_list %}
{# 每一个contact都是News的象对#}
{{ contact.title}}<br/>
{% endfor %}
<hr style="color:#CC0"/>
<div class="pagination">
    <span class="step-links">
        {% if contacts.has_previous %}
        <a href="?page={{ contacts.previous_page_number }}">上一页</a>
        {% endif %}
        <span class="current">
        第{{ contacts.number }}页/ 共 {{ contacts.paginator.num_pages}}页
        </span>
        {% if contacts.has_next %}
        <a href="?page={{ contacts.next_page_number }}">下一页</a>
        {% endif %}
    </span>
</div>
</body>
</html>

好了,启动服务器,在浏览器中看查结果:

    分页数据Django零碎知识(13):分页功能

    分页数据Django零碎知识(13):分页功能

    分页数据Django零碎知识(13):分页功能

 

文章结束给大家分享下程序员的一些笑话语录: 那是习惯决定的,一直保持一个习惯是不好的!IE6的用户不习惯多标签,但是最终肯定还是得转到多标签的浏览器。历史(软件UI)的进步(改善)不是以个人意志(习惯)为转移的!

你可能感兴趣的:(分页数据)