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 16 Python
详解Django+uwsgi+Nginx上线最佳实战
Mar 14 Python
Python3 Tkinter选择路径功能的实现方法
Jun 14 Python
对pyqt5中QTabWidget的相关操作详解
Jun 21 Python
Django 大文件下载实现过程解析
Aug 01 Python
python django生成迁移文件的实例
Aug 31 Python
Laravel框架表单验证格式化输出的方法
Sep 25 Python
Python字典底层实现原理详解
Dec 18 Python
pyqt5数据库使用详细教程(打包解决方案)
Mar 25 Python
基于python检查矩阵计算结果
May 21 Python
基于python tkinter的点名小程序功能的实例代码
Aug 22 Python
python-for x in range的用法(注意要点、细节)
May 10 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
Windows PHP5和Apache的安装与配置
2009/06/08 PHP
php HtmlReplace输入过滤安全函数
2010/07/03 PHP
php中文验证码实现示例分享
2014/01/12 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
一段利用WSH获取登录时间的jscript代码
2008/05/11 Javascript
javascript SocialHistory 检查访问者是否访问过某站点
2008/08/02 Javascript
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
javascript简单性能问题及学习笔记
2014/02/04 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
2015/03/30 Javascript
JavaScript动态添加css样式和script标签
2016/07/19 Javascript
Bootstrap和Angularjs配合自制弹框的实例代码
2016/08/24 Javascript
禁用backspace网页回退功能的实现代码
2016/11/15 Javascript
javascript input输入框模糊提示功能的实现
2017/09/25 Javascript
手写简单的jQuery雪花飘落效果实例
2018/04/22 jQuery
通过webpack引入第三方库的方法
2018/07/20 Javascript
Vue中函数防抖节流的理解及应用实现
2020/04/24 Javascript
[03:06]2018年度CS GO最具人气解说-完美盛典
2018/12/16 DOTA
[01:00:17]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第二场 1月25日
2021/03/11 DOTA
Python实现PS滤镜功能之波浪特效示例
2018/01/26 Python
详解如何将python3.6软件的py文件打包成exe程序
2018/10/09 Python
python实现Dijkstra静态寻路算法
2019/01/17 Python
Pandas库之DataFrame使用的学习笔记
2019/06/21 Python
IronPython连接MySQL的方法步骤
2019/12/27 Python
Python如何基于rsa模块实现非对称加密与解密
2020/01/03 Python
tensorflow中tf.slice和tf.gather切片函数的使用
2020/01/19 Python
Python约瑟夫生者死者小游戏实例讲解
2021/01/04 Python
Python实现淘宝秒杀功能的示例代码
2021/01/19 Python
Django+Django-Celery+Celery的整合实战
2021/01/20 Python
解决Python import .pyd 可能遇到路径的问题
2021/03/04 Python
中国最大的团购网站:聚划算
2016/09/21 全球购物
Marc Jacobs官方网站:美国奢侈品牌
2017/08/29 全球购物
东南亚冒险旅行与活动:Adventoro
2019/10/16 全球购物
个人委托书怎么写
2014/04/04 职场文书
集体生日活动方案
2014/08/18 职场文书
2016春季幼儿园大班开学寄语
2015/12/03 职场文书
C站最全Python标准库总结,你想要的都在这里
2021/07/03 Python