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中查找excel某一列的重复数据 剔除之后打印
Feb 10 Python
python读取TXT到数组及列表去重后按原来顺序排序的方法
Jun 26 Python
Linux 下 Python 实现按任意键退出的实现方法
Sep 25 Python
python paramiko模块学习分享
Aug 23 Python
Python内置函数 next的具体使用方法
Nov 24 Python
tensorflow 打印内存中的变量方法
Jul 30 Python
Python正则表达式和元字符详解
Nov 29 Python
python 实现UTC时间加减的方法
Dec 31 Python
pandas DataFrame 删除重复的行的实现方法
Jan 29 Python
详解python中list的使用
Mar 15 Python
PyTorch基本数据类型(一)
May 22 Python
Python制作一个仿QQ办公版的图形登录界面
Sep 22 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)
2006/10/09 PHP
php+javascript的日历控件
2009/11/19 PHP
PHP服务器页面间跳转实现方法
2012/08/02 PHP
解析php中eclipse 用空格替换 tab键
2013/06/24 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
2014/06/30 PHP
PHP实现加密的几种方式介绍
2015/02/22 PHP
php隐藏实际地址的文件下载方法
2015/04/18 PHP
PHP模板引擎smarty详细介绍
2015/05/26 PHP
jquery 元素相对定位代码
2010/10/15 Javascript
JavaScript 学习笔记之操作符
2015/01/14 Javascript
javascript实现随时变化着的背景颜色
2015/04/02 Javascript
js简单实现表单中点击按钮动态增加输入框数量的方法
2015/08/18 Javascript
微信小程序访问node.js接口服务器搭建教程
2017/04/25 Javascript
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
2017/11/22 Javascript
jQuery实现的别踩白块小游戏完整示例
2019/01/07 jQuery
vue点击自增和求和的实例代码
2019/11/06 Javascript
JavaScript代码实现微博批量取消关注功能
2021/02/05 Javascript
[48:12]Secret vs Optic Supermajor 胜者组 BO3 第三场 6.4
2018/06/05 DOTA
python str与repr的区别
2013/03/23 Python
实例讲解Python编程中@property装饰器的用法
2016/06/20 Python
使用python脚本实现查询火车票工具
2018/07/19 Python
selenium+python截图不成功的解决方法
2019/01/30 Python
Python按钮的响应事件详解
2019/03/04 Python
Django框架会话技术实例分析【Cookie与Session】
2019/05/24 Python
DAWGS鞋官方网站:鞋,凉鞋,靴子
2016/10/04 全球购物
荟萃全球保健品:维他购
2018/05/09 全球购物
求∏的近似值,直到最后一项的绝对值小于指定的数
2016/02/12 面试题
商场中秋节广播稿
2014/01/17 职场文书
一份创业计划书范文
2014/02/08 职场文书
高等教育学自荐书范文
2014/02/10 职场文书
道德演讲稿
2014/05/21 职场文书
2014年9.18纪念日演讲稿
2014/09/14 职场文书
公安局班子个人对照检查材料思想汇报
2014/10/09 职场文书
2015年员工试用期工作总结
2015/05/28 职场文书
运动会加油稿
2015/07/22 职场文书
2019年自助餐厅创业计划书模板
2019/08/22 职场文书