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学习资料
Feb 08 Python
Python函数嵌套实例
Sep 23 Python
Python3访问并下载网页内容的方法
Jul 28 Python
Python中正则表达式详解
May 17 Python
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
Jun 07 Python
Django配置celery(非djcelery)执行异步任务和定时任务
Jul 16 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
Oct 28 Python
Django实现学员管理系统
Feb 26 Python
用Python识别人脸,人种等各种信息
Jul 15 Python
Python Flask框架实现简单加法工具过程解析
Jun 03 Python
python 解决selenium 中的 .clear()方法失效问题
Sep 01 Python
Python 居然可以在 Excel 中画画你知道吗
Feb 15 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
全国FM电台频率大全 - 21 海南省
2020/03/11 无线电
一个更简单的无限级分类菜单代码
2007/01/16 PHP
php中经典方法实现判断多维数组是否为空
2011/10/23 PHP
PHP实现即时输出、实时输出内容方法
2015/05/27 PHP
PHP.ini安全配置检测工具pcc简单介绍
2015/07/02 PHP
PHP概率计算函数汇总
2015/09/13 PHP
PHP+AJAX实现投票功能的方法
2015/09/28 PHP
PHP ob缓存以及ob函数原理实例解析
2020/11/13 PHP
javascript web对话框与弹出窗口
2009/02/22 Javascript
JS文本框默认值处理详解
2013/07/10 Javascript
JavaScript基本数据类型及值类型和引用类型
2015/08/25 Javascript
使用javascript插入样式
2016/03/14 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
2017/01/04 Javascript
使用async-validator编写Form组件的方法
2018/01/10 Javascript
js数据类型检测总结
2018/08/05 Javascript
解决js相同的正则多次调用test()返回的值却不同的问题
2018/10/10 Javascript
js继承的这6种方式!(上)
2019/04/23 Javascript
使用Python脚本对Linux服务器进行监控的教程
2015/04/02 Python
简单介绍Python中的JSON模块
2015/04/08 Python
python简单实现操作Mysql数据库
2018/01/29 Python
python 获得任意路径下的文件及其根目录的方法
2019/02/16 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
使用Python三角函数公式计算三角形的夹角案例
2020/04/15 Python
Python figure参数及subplot子图绘制代码
2020/04/18 Python
在keras中对单一输入图像进行预测并返回预测结果操作
2020/07/09 Python
Python调用百度OCR实现图片文字识别的示例代码
2020/07/17 Python
海淘零差价,宝贝全球购: 宝贝格子
2016/08/24 全球购物
英国可持续奢侈品包包品牌:Elvis & Kresse
2018/08/05 全球购物
军训自我鉴定100字
2014/02/13 职场文书
大学生在校学习的自我评价
2014/02/18 职场文书
建议书标准格式
2014/03/12 职场文书
《沙漠中的绿洲》教学反思
2014/04/24 职场文书
幼儿老师求职信
2014/06/30 职场文书
圣诞节开幕词
2015/01/29 职场文书
请病假条范文
2015/08/17 职场文书
swagger如何返回map字段注释
2021/07/03 Java/Android