• django-分页paginator


    分页

    Django提供了一些类来帮助你管理分页的数据 -- 也就是说,数据被分在不同页面中,并带有“上一页/下一页”标签。这些类位于 django/core/paginator.py 中。

    示例

    向 Paginator 提供对象的列表,以及你想为每一页分配的元素数量,它就会为你提供访问每一页上对象的方法:

     1 >>> from django.core.paginator import Paginator
     2 >>> objects = ['john', 'paul', 'george', 'ringo']
     3 >>> p = Paginator(objects, 2)
     4 >>> p.count
     5 4
     6 >>> p.num_pages
     7 2
     8 >>> p.page_range
     9 [1, 2]
    10 >>> page1 = p.page(1)
    11 >>> page1
    12 <Page 1 of 2>
    13 >>> page1.object_list
    14 ['john', 'paul']
    15 >>> page2 = p.page(2)
    16 >>> page2.object_list
    17 ['george', 'ringo']
    18 >>> page2.has_next()
    19 False
    20 >>> page2.has_previous()
    21 True
    22 >>> page2.has_other_pages()
    23 True
    24 >>> page2.next_page_number()
    25 Traceback (most recent call last):
    26 ...
    27 EmptyPage: That page contains no results
    28 >>> page2.previous_page_number()
    29 1
    30 >>> page2.start_index() # The 1-based index of the first item on
    31 this page
    32 3
    33 >>> page2.end_index() # The 1-based index of the last item on th
    34 is page
    35 4
    36 >>> p.page(0)
    37 Traceback (most recent call last):
    38 ...
    39 EmptyPage: That page number is less than 1
    40 >>> p.page(3)
    41 Traceback (most recent call last):
    42 ...
    43 EmptyPage: That page contains no results

    注意你可以向 Paginator 提供一个列表或元组,Django的 QuerySet ,或者任何带有 count() 或 __len__() 方法的对象。当计算传入的对象所含对象的数量时, Paginator 会首先尝试调用 count() ,接着如果传入的对象没有 count() 方法则回退调用 len() 。这样会使类似于Django的 QuerySet 的对象使用更加高效的 count() 方法,如果存在的话。

    使用Paginator

    这里有一些复杂一点的例子,它们在视图中使用 Paginator 来为查询集分页。我们提供视图以及相关的模板来展示如何展示这些结果。这个例子假设你拥有一个已经导入的 Contacts 模型。


    视图函数看起来像这样:

    from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
    from .models import Contants#Contacts为导入的模型

    def listing(request):
    contact_list = Contacts.objects.all()
    paginator = Paginator(contact_list, 25) # Show 25 contacts per page
    page = request.GET.get('page')
    try:
    contacts = paginator.page(page)
    except PageNotAnInteger:
    # If page is not an integer, deliver first page.
    contacts = paginator.page(1)
    except EmptyPage:
    # If page is out of range (e.g. 9999), deliver last page of results.
    contacts = paginator.page(paginator.num_pages)
    return render_to_response('list.html', {"contacts": contacts})

    译者:Django 文档协作翻译小组,原文:Pagination。
    本文以 CC BY-NC-SA 3.0 协议发布,转载请保留作者署名和文章出处。

  • 相关阅读:
    jsp 接收汉字参数乱码
    文件下载汉字乱码
    服务器端汉字乱码
    SpringMVC + ajax
    Java正确URL解码方式:URLDecoder.decode
    spring MVC 文件上传错误
    json
    android 带checkbox的List
    Incorrect string value: 'xE8x8Bx8FxE6x99xA8...' for column 'user_name' at row 1
    django初探-创建简单的博客系统(一)
  • 原文地址:https://www.cnblogs.com/welan/p/9156402.html
Copyright © 2020-2023  润新知