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 相关文章推荐
python3使用urllib示例取googletranslate(谷歌翻译)
Jan 23 Python
Python爬虫框架Scrapy安装使用步骤
Apr 01 Python
Python反射用法实例简析
Dec 22 Python
python 爬虫 批量获取代理ip的实例代码
May 22 Python
Python拼接字符串的7种方法总结
Nov 01 Python
Python面向对象程序设计类的封装与继承用法示例
Apr 12 Python
Python PyCharm如何进行断点调试
Jul 05 Python
Python collections模块使用方法详解
Aug 28 Python
基于python3 的百度图片下载器的实现代码
Nov 05 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
May 18 Python
Python爬取股票信息,并可视化数据的示例
Sep 26 Python
tensorflow中的梯度求解及梯度裁剪操作
May 26 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
PHP5中使用PDO连接数据库的方法
2010/08/01 PHP
PHP使用imagick读取PDF生成png缩略图的两种方法
2014/03/20 PHP
php读取3389的脚本
2014/05/06 PHP
总结PHP如何获取当前主机、域名、网址、路径、端口和参数等
2016/09/09 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
2019/09/18 PHP
php中用unset销毁变量并释放内存
2020/05/10 PHP
js下将字符串当函数执行的方法
2011/07/13 Javascript
node.js中的fs.fstat方法使用说明
2014/12/15 Javascript
javascript使用switch case实现动态改变超级链接文字及地址
2014/12/16 Javascript
jQuery+html5实现div弹出层并遮罩背景
2015/04/15 Javascript
JQuery实现的图文自动轮播效果插件
2015/06/19 Javascript
jQuery实现新消息在网页标题闪烁提示
2015/06/23 Javascript
jQuery中数据缓存$.data的用法及源码完全解析
2016/04/29 Javascript
jQuery Chosen通用初始化
2017/03/07 Javascript
jQuery实现动态生成表格并为行绑定单击变色动作的方法
2017/04/17 jQuery
js图片上传的封装代码
2017/08/01 Javascript
Vue中正确使用jQuery的方法
2017/10/30 jQuery
JS实现的3des+base64加密解密算法完整示例
2018/05/18 Javascript
小程序scroll-view安卓机隐藏横向滚动条的实现详解
2019/05/16 Javascript
Python实现变量数值交换及判断数组是否含有某个元素的方法
2017/09/18 Python
解决Python一行输出不显示的问题
2018/12/03 Python
Python turtle库绘制菱形的3种方式小结
2019/11/23 Python
python爬虫使用正则爬取网站的实现
2020/08/03 Python
python SOCKET编程基础入门
2021/02/27 Python
CSS3实现鼠标悬停显示扩展内容
2016/08/24 HTML / CSS
美国指甲油品牌:Deco Miami
2017/01/30 全球购物
沙龙级头发造型工具:FOXYBAE
2018/07/01 全球购物
VC++笔试题
2014/10/13 面试题
退伍老兵事迹材料
2014/01/31 职场文书
体育专业自荐书
2014/05/29 职场文书
加油口号大全
2014/06/13 职场文书
个人向公司借款协议书
2014/10/09 职场文书
学校运动会广播稿
2014/10/11 职场文书
2016年安康杯竞赛活动总结
2016/04/05 职场文书
原生JS中应该禁止出现的写法
2021/05/05 Javascript
Win11黑色桌面背景怎么办?Win11黑色壁纸解决方法汇总
2022/04/05 数码科技