Django之分页功能

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


基本语法

class Paginator(object):
 
    def __init__(self, object_list, per_page, orphans=0,
                 allow_empty_first_page=True):
        self.object_list = object_list
        self.per_page = int(per_page)
        self.orphans = int(orphans)
        self.allow_empty_first_page = allow_empty_first_page
 
……

 

基本语法实例

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
 
import os
 
from django.core.paginator import Paginator
objects = ['john','paul','george','ringo','lucy','meiry','checy','wind','flow','rain']<br>
p = Paginator(objects,3)  # 3条数据为一页,实例化分页对象
print p.count  # 10 对象总共10个元素
print p.num_pages  # 4 对象可分4页
print p.page_range  # xrange(1, 5) 对象页的可迭代范围
 
page1 = p.page(1)  # 取对象的第一分页对象
print page1.object_list  # 第一分页对象的元素列表['john', 'paul', 'george']
print page1.number  # 第一分页对象的当前页值 1
 
page2 = p.page(2)  # 取对象的第二分页对象
print page2.object_list  # 第二分页对象的元素列表 ['ringo', 'lucy', 'meiry']
print page2.number  # 第二分页对象的当前页码值 2
 
print page1.has_previous()  # 第一分页对象是否有前一页 False
print page1.has_other_pages()  # 第一分页对象是否有其它页 True
 
print page2.has_previous()  # 第二分页对象是否有前一页 True
print page2.has_next()  # 第二分页对象是否有下一页 True
print page2.next_page_number()  # 第二分页对象下一页码的值 3
print page2.previous_page_number()  # 第二分页对象的上一页码值 1
print page2.start_index()  # 第二分页对象的元素开始索引 4
print page2.end_index()  # 第2分页对象的元素结束索引 6



在视图中的应用

from django.core.paginator import Paginator, InvalidPage,EmptyPage,PageNotAnInteger
from django.shortcuts import render
 
def listing(request):
    try:
        article_list = Article.objects.all()                #获取文章数据
        paginator = Paginator(article_list,3)               #创建分页对象,每页显示5个
        try:
            page = int(request.GET.get('page',1))           #获取分页当前页,如果客户没有传任何数据,则默认为1
            article_list = paginator.page(page)
        except (EmptyPage,InvalidPage,PageNotAnInteger):
            article_list = paginator.page(1)

    except Exception as e:
        logger.error(e)
    return render(request, "index.html", locals())           #locals是一个函数,包含当前作用域所有变量对象

 

前端配置:

在template的html模板中的应用

{% %}

  
    {{ .}}
    {{ .}}
    {% ..%}{{ .}}{% %}{{ .}}浏览({{ .}})评论({{ ...}})
  

{% %}
    
    {% .%}
    {{ .}}上一页
    {% %}
    上一页
    {% %}
     {{ .}}/{{ ..}}
    {% .%}
      {{ .}}下一页 
    {% %}
      下一页 
    {% %}