Django提供了一个新的类来帮助你管理分页数据,.它可以接收列表、元组或其它可迭代的对象。

一:常用方法

>>> from django.core.paginator import Paginator
>>> objects = ['john', 'paul', 'george', 'ringo']
>>> p = Paginator(objects, 2)

>>> p.count
4
>>> p.num_pages
2
>>> type(p.page_range)
<class 'range_iterator'>
>>> p.page_range
range(1, 3)

>>> page1 = p.page(1)
>>> page1
<Page 1 of 2>
>>> page1.object_list
['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
>>> page2.previous_page_number()
1
>>> page2.start_index() # The 1-based index of the first item on this page
3
>>> page2.end_index() # The 1-based index of the last item on this page
4

>>> p.page(0)
Traceback (most recent call last):
...
EmptyPage: That page number is less than 1
>>> p.page(3)
Traceback (most recent call last):
...
EmptyPage: That page contains no results

 

二:定义工具

  定义工具,可供多个页面使用。

  效果如下:

45)django-分页实现

  1)定义方法:pages.py

 

# -*- coding:utf-8 -*-
__author__ = 'lixiang'

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger


def page(request,post_objects,page_number=20):
    """
    实现分页
    :param request:  view中request
    :param post_objects: 需要实现分页的对象(列表,queryset)
    :param page_number: #每页显示条数,默认20页
    :return:
    """
    #实例化结果集,    queryset转列表
    post_objects=list(post_objects)
    paginator = Paginator(post_objects, page_number) # Show 20 contacts per page

    #获取htmml中传递page值
    page = request.GET.get('page',1)
    try:
        #需要返回的值
        page_objs = paginator.page(page)
    except PageNotAnInteger:
        # 如果page不是整数,返回第1页
        page_objs = paginator.page(1)
    except EmptyPage:
        # 如果page超出最大值 ,只显示最后一页
        page_objs = paginator.page(paginator.num_pages)

    return page_objs
View Code

相关文章:

  • 2021-04-15
  • 2021-09-30
  • 2022-12-23
  • 2021-08-03
  • 2021-12-16
  • 2021-09-03
  • 2022-12-23
猜你喜欢
  • 2021-06-29
  • 2021-07-31
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-09
相关资源
相似解决方案