Django实现分页功能


Posted in Python onJuly 02, 2018

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, EmptyPage, PageNotAnInteger
from django.shortcuts import render
 
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(request, 'list.html', {'contacts': contacts})

在template的html模板中的应用

{% for contact in contacts %}
  {# Each "contact" is a Contact model object. #}
  {{ contact.full_name|upper }}<br />
  ...
{% endfor %}
 
<div class="pagination">
  <span class="step-links">
    {% if contacts.has_previous %}
      <a href="?page={{ contacts.previous_page_number }}">previous</a>
    {% endif %}
 
    <span class="current">
      Page {{ contacts.number }} of {{ contacts.paginator.num_pages }}.
    </span>
 
    {% if contacts.has_next %}
      <a href="?page={{ contacts.next_page_number }}">next</a>
    {% endif %}
  </span>
</div>

举例讲述分页功能的使用目的说明

现要实现如下功能

1、网页上显示分页数据,3条数据为一页

2、有分页导航功能,被选中页高亮显示

3、如果没有上一页或下一页,则不出现箭头导航

4、如果最后一页的数据少于2条,合并到上一页

效果图

图1:

Django实现分页功能

 

图2:

Django实现分页功能

 视图定义

Django实现分页功能

  定义templates

 Django实现分页功能

 分页功能优化

目标:

1、在template中的html模板中使用自定义函数

2、不管有多少分页,页面上最多显示5页

 

基础知识

Django的模板语言包含了各种各样的内置标签和过滤器来满足你的应用需求,不过有时候你也会发现你的需要的功能不在内置的功能中,这时候你可以通过Python语言自定义标签和过滤器来扩展模板引擎,然后在你的模板中使用{% load %}来加载使用它们。

在你的app下创建templatetags包,在其下创建python脚本来定义你的标签和过滤器,如:

polls/
  __init__.py
  models.py
  templatetags/
    __init__.py
    poll_extras.py
  views.py

然后在你的模板中使用

{% load poll_extras %}

项目实战

自定义过滤器和标签

Django实现分页功能

在模板中引用

Django实现分页功能

效果图:

Django实现分页功能

https://github.com/kongzhagen/python/tree/master/Django

Python 相关文章推荐
Python装饰器使用示例及实际应用例子
Mar 06 Python
Python实现命令行通讯录实例教程
Aug 18 Python
python实现银联支付和支付宝支付接入
May 07 Python
Django框架登录加上验证码校验实现验证功能示例
May 23 Python
python实时检测键盘输入函数的示例
Jul 17 Python
python3 批量获取对应端口服务的实例
Jul 25 Python
python tkinter实现屏保程序
Jul 30 Python
Flask框架模板继承实现方法分析
Jul 31 Python
python使用Matplotlib改变坐标轴的默认位置
Oct 18 Python
Flask框架请求钩子与request请求对象用法实例分析
Nov 07 Python
Django后端发送小程序微信模板消息示例(服务通知)
Dec 17 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
Jun 03 Python
详解python单元测试框架unittest
Jul 02 #Python
python中多层嵌套列表的拆分方法
Jul 02 #Python
python中int与str互转方法
Jul 02 #Python
用Python将一个列表分割成小列表的实例讲解
Jul 02 #Python
python绘制圆柱体的方法
Jul 02 #Python
Django开发中的日志输出的方法
Jul 02 #Python
Python中循环后使用list.append()数据被覆盖问题的解决
Jul 01 #Python
You might like
PHP计数器的实现代码
2013/06/08 PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
2014/03/12 PHP
php猴子选大王问题解决方法
2015/05/12 PHP
网站被黑的假象--ARP欺骗之页面中加入一段js
2007/05/16 Javascript
iframe自适应宽度、高度 ie6 7 8,firefox 3.86下测试通过
2010/07/29 Javascript
JS实现点击图片在当前页面放大并可关闭的漂亮效果
2013/10/18 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
Javascript点击其他任意地方隐藏关闭DIV实例
2016/06/21 Javascript
jQuery简单实现点击文本框复制内容到剪贴板上的方法
2016/08/01 Javascript
jQuery可见性过滤选择器用法示例
2016/09/09 Javascript
js鼠标跟随运动效果
2017/03/11 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
2017/04/13 Javascript
vue.js实现数据动态响应 Vue.set的简单应用
2017/06/15 Javascript
weex里Vuex state使用storage持久化详解
2017/09/09 Javascript
详解如何在项目中使用jest测试react native组件
2018/02/09 Javascript
vue和webpack项目构建过程常用的npm命令详解
2018/06/15 Javascript
解决vue动态为数据添加新属性遇到的问题
2018/09/18 Javascript
JS性能优化实现方法及优点进行
2020/08/30 Javascript
[59:30]完美世界DOTA2联赛PWL S3 access vs LBZS 第二场 12.20
2020/12/23 DOTA
python使用urllib模块和pyquery实现阿里巴巴排名查询
2014/01/16 Python
浅析Python中MySQLdb的事务处理功能
2016/09/21 Python
Python实现的txt文件去重功能示例
2018/07/07 Python
深入flask之异步非堵塞实现代码示例
2018/07/31 Python
Python2和Python3中@abstractmethod使用方法
2020/02/04 Python
Python reques接口测试框架实现代码
2020/07/28 Python
Python中Yield的基本用法
2020/10/18 Python
使用CSS3实现input多选框自定义样式的方法示例
2019/07/19 HTML / CSS
HTML5自定义data-* data(obj)属性和jquery的data()方法的使用
2012/12/13 HTML / CSS
Shell编程面试题
2016/05/29 面试题
元宵节主持词
2014/03/25 职场文书
乡文化站暑期培训方案
2014/08/28 职场文书
高等学院职业生涯规划书范文
2014/09/16 职场文书
2014年招商引资工作总结
2014/11/22 职场文书
中班教师个人总结
2015/02/05 职场文书
创业计划书之宠物店
2019/09/19 职场文书
我收到了德劲DE1107
2022/04/05 无线电