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 11 Python
Python 专题一 函数的基础知识
Mar 16 Python
python装饰器实例大详解
Oct 25 Python
python筛选出两个文件中重复行的方法
May 31 Python
Python利用pandas处理Excel数据的应用详解
Jun 18 Python
python设置随机种子实例讲解
Sep 12 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
Sep 15 Python
python循环输出三角形图案的例子
Nov 22 Python
Python的形参和实参使用方式
Dec 24 Python
python+django+selenium搭建简易自动化测试
Aug 19 Python
python如何快速拼接字符串
Oct 28 Python
python中温度单位转换的实例方法
Dec 27 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动态生成虚拟现实VRML网页
2006/10/09 PHP
php代码运行时间查看类代码分享
2011/08/06 PHP
PHP加密函数 Javascript/Js 解密函数
2013/09/23 PHP
PHP使用CURL获取302跳转后的地址实例
2014/05/04 PHP
浅析PHP的静态成员函数效率更高的原因
2014/06/13 PHP
php实现无限级分类(递归方法)
2015/08/06 PHP
DB.ASP 用Javascript写ASP很灵活很好用很easy
2011/07/31 Javascript
js克隆对象、数组的常用方法介绍
2013/09/26 Javascript
利用浏览器全屏api实现js全屏
2014/01/16 Javascript
jquery实现弹出div,始终显示在屏幕正中间的简单实例
2014/03/08 Javascript
jQuery元素选择器用法实例
2014/12/23 Javascript
JavaScript中使用Object.create()创建对象介绍
2014/12/30 Javascript
JavaScript中document.forms[0]与getElementByName区别
2015/01/21 Javascript
JavaScript 实现的 zip 压缩和解压缩工具包Zip.js使用详解
2015/12/14 Javascript
Javascript自定义事件详解
2017/01/13 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
jQuery Position方法使用和兼容性
2017/08/23 jQuery
Node解决简单重复问题系列之Excel内容的获取
2018/01/02 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
react实现同页面三级跳转路由布局
2019/09/26 Javascript
[01:33]PWL开团时刻DAY2-开雾与反开雾
2020/10/31 DOTA
Python 中导入csv数据的三种方法
2018/11/01 Python
Python3.5装饰器典型案例分析
2019/04/30 Python
Python空间数据处理之GDAL读写遥感图像
2019/08/01 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
2019/08/16 Python
Python利用逻辑回归模型解决MNIST手写数字识别问题详解
2020/01/14 Python
tensorflow 自定义损失函数示例代码
2020/02/05 Python
python时间与Unix时间戳相互转换方法详解
2020/02/13 Python
详解CSS的border边框属性及其在CSS3中的新特性
2016/05/10 HTML / CSS
sort命令的作用和用法
2013/08/25 面试题
应付会计岗位职责
2013/12/12 职场文书
车队司机自我鉴定
2014/03/02 职场文书
环境建设实施方案
2014/03/14 职场文书
新年团拜会主持词
2014/04/02 职场文书
idea搭建可运行Servlet的Web项目
2021/06/26 Java/Android
springboot集成flyway自动创表的详细配置
2021/06/26 Java/Android