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 相关文章推荐
web.py在SAE中的Session问题解决方法(使用mysql存储)
Jun 24 Python
Python的Twisted框架上手前所必须了解的异步编程思想
May 25 Python
python3使用PyMysql连接mysql数据库实例
Feb 07 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
Feb 10 Python
pandas把dataframe转成Series,改变列中值的类型方法
Apr 10 Python
示例详解Python3 or Python2 两者之间的差异
Aug 23 Python
Python中asyncio与aiohttp入门教程
Oct 16 Python
Pytorch 实现自定义参数层的例子
Aug 17 Python
Python 实用技巧之利用Shell通配符做字符串匹配
Aug 23 Python
Django基于客户端下载文件实现方法
Apr 21 Python
Python3 使用pip安装git并获取Yahoo金融数据的操作
Apr 08 Python
使用opencv-python如何打开USB或者笔记本前置摄像头
Jun 21 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 5.3.0 安装分析心得
2009/08/07 PHP
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
2011/01/06 PHP
php设计模式 Chain Of Responsibility (职责链模式)
2011/06/26 PHP
PHP高手需要要掌握的知识点
2014/08/21 PHP
使用PHPMailer发送邮件实例
2017/02/15 PHP
[原创]php正则删除img标签的方法示例
2017/05/27 PHP
Javascript客户端脚本的设计和应用
2006/08/21 Javascript
IE8下关于querySelectorAll()的问题
2010/05/13 Javascript
Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中
2011/10/29 Javascript
利用Keydown事件阻止用户输入实现代码
2014/03/11 Javascript
JavaScript中的单引号和双引号报错的解决方法
2014/09/01 Javascript
深入理解JavaScript系列(39):设计模式之适配器模式详解
2015/03/04 Javascript
JavaScript DOM 学习总结(五)
2015/11/24 Javascript
Backbone中View之间传值的学习心得
2016/08/09 Javascript
jquery心形点赞关注效果的简单实现
2016/11/14 Javascript
Bootstrap基本样式学习笔记之按钮(4)
2016/12/07 Javascript
简单谈谈原生js的math对象
2017/06/27 Javascript
JavaScript模块模式实例详解
2017/10/25 Javascript
JS实现DOM删除节点操作示例
2018/04/04 Javascript
JavaScript实现的联动菜单特效示例
2019/07/08 Javascript
在Express中提供静态文件的实现方法
2019/10/17 Javascript
使用jQuery实现掷骰子游戏
2019/10/24 jQuery
用Python编写生成树状结构的文件目录的脚本的教程
2015/05/04 Python
TensorFlow saver指定变量的存取
2018/03/10 Python
python 提取tuple类型值中json格式的key值方法
2018/12/31 Python
Python设计模式之备忘录模式原理与用法详解
2019/01/15 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
python自动化测试之异常及日志操作实例分析
2019/11/09 Python
Django项目创建及管理实现流程详解
2020/10/13 Python
Lookfantastic意大利官网:英国知名美妆购物网站
2019/05/31 全球购物
英国现代家具和照明购物网站:Heal’s
2019/10/30 全球购物
银行优秀员工事迹
2014/02/06 职场文书
爱国主义教育活动总结
2014/05/07 职场文书
项目申报专员岗位职责
2014/07/09 职场文书
旷课检讨书范文
2014/10/30 职场文书
2016年大学生暑期社会实践方案
2015/11/26 职场文书