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中多线程的创建及基本调用方法
Jul 08 Python
Python脚本实现自动将数据库备份到 Dropbox
Feb 06 Python
Python 用Redis简单实现分布式爬虫的方法
Nov 23 Python
python3大文件解压和基本操作
Dec 15 Python
python爬虫获取多页天涯帖子
Feb 23 Python
python使用jieba实现中文分词去停用词方法示例
Mar 11 Python
Python实现合并两个列表的方法分析
May 28 Python
Django框架实现的普通登录案例【使用POST方法】
May 15 Python
PyTorch中常用的激活函数的方法示例
Aug 20 Python
pytorch的batch normalize使用详解
Jan 15 Python
Django用数据库表反向生成models类知识点详解
Mar 25 Python
Python将list元素转存为CSV文件的实现
Nov 16 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
jQuery+php实现ajax文件即时上传的详解
2013/06/17 PHP
PHP 二维数组和三维数组的过滤
2016/03/16 PHP
phpStudy 2016 使用教程详解(支持PHP7)
2017/10/18 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
msn上的tab功能Firefox对childNodes处理的一个BUG
2008/01/21 Javascript
JavaScript类和继承 this属性使用说明
2010/09/03 Javascript
基于jQuery+HttpHandler实现图片裁剪效果代码(适用于论坛, SNS)
2011/09/02 Javascript
使图片旋转的3种解决方案
2013/11/21 Javascript
JavaScript中的对象与JSON
2015/07/03 Javascript
JavaScript高级教程5.6之基本包装类型(详细)
2015/11/23 Javascript
原生JS获取元素的位置与尺寸实现方法
2017/10/18 Javascript
基于vue-element组件实现音乐播放器功能
2018/05/06 Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
2018/12/20 Javascript
vue仿ios列表左划删除
2019/09/26 Javascript
JS原型和原型链原理与用法实例详解
2020/02/05 Javascript
[01:00:25]NB vs Secret 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
python mysqldb连接数据库
2009/03/16 Python
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
Python实现抓取百度搜索结果页的网站标题信息
2015/01/22 Python
批量将ppt转换为pdf的Python代码 只要27行!
2018/02/26 Python
python判断文件是否存在,不存在就创建一个的实例
2019/02/18 Python
我喜欢你 抖音表白程序python版
2019/04/07 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
Pandas中DataFrame的分组/分割/合并的实现
2019/07/16 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
使用CSS3的appearance属性改变元素的外观的方法
2015/12/12 HTML / CSS
html5 video全屏播放/自动播放的实现示例
2020/08/06 HTML / CSS
电子商务毕业生求职信
2013/11/10 职场文书
触摸春天教学反思
2014/02/03 职场文书
《第一次抱母亲》教学反思
2014/04/16 职场文书
承租经营合作者协议书
2014/10/01 职场文书
2014年学校食堂工作总结
2014/11/25 职场文书
详解MySQL 用户权限管理
2021/04/20 MySQL
css position fixed 左右双定位的实现代码
2021/04/29 HTML / CSS
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL