在Django 项目中使用自带的分页模块,记录如下:

相关说明

from django.core.paginator import Paginator
objects = ['abc','bcd','cde','def','efg','fgh']
p = Paginator(objects, 2)#表示传入数据集合,2 表示每页存放的数据个数
p.cout #6 表示数据总量
p.num_pages#3 表示总页数
p.per_page#2 表示每页的数量
p.object_list# ['abc','bcd','cde','def','efg','fgh']  所有数据列表
p.page_range  #[1, 2, 3]   表示页数
p1 = p.page(1)#获取第一页的对象
p1.object_list#['abc', 'bcd'] 该页上的数据
p1.has_next()#True,判断该页是否有下一页
p1.has_previous()#False,判断该页是否有上一页
p1.has_other_pages() #判断该页是否有上或者下页
p1.start_index()# 1 p1开始的索引值
p1.end_index()#2 p1结束的索引值
p1.next_page_number()# #返回下一页的页码,如果下一页不存在,抛出InvalidPage异常
p1.previous_page_number()#返回前一页的页码,如果上一页不存在,抛出InvalidPag异常
p1.paginator# 相关paginator的对象

Django中使用分页

views.py中

from django.shortcuts import render_to_response
from django.core.paginator import Paginator, EmptyPage, InvalidPage, PageNotAnInteger
from models import *

def device_status(request):    
    All_page_info = Device_status.objects.all()   
    DataCount,page,All_page_info = All_in_one(request,All_page_info)           
    return my_render("serverinfo/device_status.html",locals(),request)

def my_render(template,data,request):
    return render_to_response(template, data, context_instance=RequestContext(request))

def getpage_id(request):
    """
        传递前端page过来的值,如果没有设置为1
    """
    page = request.GET.get("page","")
    if page:
        page = request.GET.get("page","")
    else:
        page = 1
    return page

def getpages(Data,page):
       """ 
            处理分页函数
    """
    paginator = Paginator(list(Data),2)
    try:
        Data = paginator.page(page)
    except PageNotAnInteger:
        Data = paginator.page(1)
    except EmptyPage:
        Data = paginator.page(paginator.num_pages)
    return Data,page

def All_in_one(request,All_page_info):
    DataCount = len(All_page_info)
    page = getpage_id(request)
    All_page_info,page=getpages(All_page_info,page)
    return DataCount,page,All_page_info

templates中

paginator.html  //将该模板导入需要添加分页功能的页面即可({% include 'paginator.html' %})


   {% if All_page_info.has_previous %} 
       上一页 
         
   {% endif %}
   
       第 {{ All_page_info.number }}页  总 {{ All_page_info.paginator.num_pages }} 页  
   
   {% if All_page_info.has_next %}
       下一页 
   {% endif %}


       共`DataCount`条记录

效果展示:

Django 使用分页_第1张图片