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实现的AES双向对称加密解密与用法分析
May 02 Python
python使用插值法画出平滑曲线
Dec 15 Python
python re正则匹配网页中图片url地址的方法
Dec 20 Python
Python弹出输入框并获取输入值的实例
Jun 18 Python
Django REST framework内置路由用法
Jul 26 Python
python双端队列原理、实现与使用方法分析
Nov 27 Python
python_mask_array的用法
Feb 18 Python
python数据分析:关键字提取方式
Feb 24 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
Jun 01 Python
Python实现机器学习算法的分类
Jun 03 Python
Pygame Time时间控制的具体使用详解
Nov 17 Python
python和anaconda的区别
May 06 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
咖啡冲泡指南 咖啡有哪些制作方式 单品咖啡 意式咖啡
2021/03/06 冲泡冲煮
php面向对象全攻略 (十) final static const关键字的使用
2009/09/30 PHP
PDO版本问题 Invalid parameter number: no parameters were bound
2013/01/06 PHP
php-perl哈希算法实现(times33哈希算法)
2013/12/30 PHP
PHP实现取得HTTP请求的原文
2014/08/18 PHP
php获取本周开始日期和结束日期的方法
2015/03/09 PHP
PHP下载文件函数与用法示例
2019/09/27 PHP
PHP Swoole异步MySQL客户端实现方法示例
2019/10/24 PHP
Extjs学习笔记之八 继承和事件基础
2010/01/08 Javascript
javascript中获取下个月一号,是星期几
2012/06/01 Javascript
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
2012/08/14 Javascript
基于dom编程中 动态创建与删除元素的使用
2013/04/17 Javascript
jquery实现图片按比例缩放示例
2014/07/01 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
2014/08/22 Javascript
jQuery实现控制文字内容溢出用省略号(…)表示的方法
2016/02/26 Javascript
原生js制作日历控件实例分享
2016/04/06 Javascript
基于jquery二维码生成插件qrcode
2017/01/07 Javascript
Angular6 Filter实现页面搜索的示例代码
2018/12/02 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
jenkins自动构建发布vue项目的方法步骤
2021/01/04 Vue.js
vue3 watch和watchEffect的使用以及有哪些区别
2021/01/26 Vue.js
详解Python中使用base64模块来处理base64编码的方法
2016/07/01 Python
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
使用Python对Csv文件操作实例代码
2017/05/12 Python
python实现人脸识别代码
2017/11/08 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
2019/01/29 Python
Python根据成绩分析系统浅析
2019/02/11 Python
彪马加拿大官网:PUMA加拿大
2018/10/04 全球购物
会计专业自我鉴定范文
2013/12/29 职场文书
校本教研工作方案
2014/01/14 职场文书
机械工程及其自动化专业求职信
2014/08/08 职场文书
自强自立美德少年事迹材料
2014/08/16 职场文书
2014年人事工作总结范文
2014/11/19 职场文书
房贷收入证明范本
2015/06/12 职场文书
Java的Object类的九种方法
2022/04/13 Java/Android
使用CSS实现六边形的图片效果
2022/08/05 HTML / CSS