网站,特别是论坛,就如本社区一样,肯定会遇到某个页面要显示列表(比如本社区的首页,要显示主题列表),那肯定就会涉及到列表的分页功能。

举个例子,比如一个列表有100个item,那我们网站的页面是不是将此100个item都显示出来吗?显示不是哦,这样做以后一来是页面不好看(页面太长啦),用户体验不好(用户根本不需要看这么多item);第二就是性能不好(一下子读取这么多item,网站肯定很吃力 啊)。

废话就不说啦,今天将要介绍一下Django的分页利器APP--- django-pagination,它可以非常方便的为你实现你的分页目标!我将结合 本社区的实现方式来介绍。

项目主页: https://github.com/ericflo/django-pagination/

本社区使用它来进行各种列表的分页。

介绍:

django-pagination allows for easy Digg-style pagination without modifying your views.

django-pagination就像它的名字一样,它是一个Django分页器,它包含了一组翻页功能相关的utils,包括用于实现翻页的tag等。使用起来非常简单。是目前使用最多的分页APP。

如何使用:

总共有七步来实现:

  1. 安装

    sudo python setup.py install

  2. 将该APP安装至Django项目中。(请修改settings.py)

     INSTALLED_APPS = (# ...'pagination',)
    

  3. 在Django项目的middleware中安装此APP:(请修改settings.py)

     MIDDLEWARE_CLASSES = (# ...'pagination.middleware.PaginationMiddleware',)
    

    这样,django-pagination可以在页面请求过程中做一些简单的处理。

  4. 请确保你的请求上下文含有django.core.context_processors.request。 如果没有的话,请将django.core.context_processors.request加入到 TEMPLATE_CONTEXT_PROCESSORS中,示例如下:(请修改settings.py)。

    ("django.core.context_processors.auth","django.core.context_processors.debug","django.core.context_processors.i18n","django.core.context_processors.media","django.core.context_processors.request")
    

  5. 在你要进行列表分页的页面(template)的页面上方(最好是最上面)中 导入 它的tag, 以便后续我们可以在模板中使用它的一些功能。

     {% load pagination_tags %}
    

  6. 在你的模板(template)页面上,对你想要分页的列表变量(object_list)进行分页,在模板中写如下代码:(这段短代码的位置要在 放在 你显示 object_list 之前)

    {% autopaginate object_list %}
    

    上面对列表分页后默认每页有20个,如果你想自己自定义,可以这样:

    {% autopaginate object_list 10 %}
    

    这样对列表分页后每页显示10个。

    分页后,django-pagination会更改object_list 的值,将object_list 变成一个只有20个(默认情况下)的列表。你可以对object_list 进行遍历,显示出他们。

    经过此步后,大家就可以获取得到只有一页的列表啦。

  7. 经过上步,我们得到一页列表啦,但是我们想要第二页,第三页……,最好是在每一页的最底部有一个页数导航栏可以供大家选择。例如:

    方法很简单。只要在页面的最底下使用如下代码:

    {% paginate %}
    

    当然,页数导航栏使用的UI模板是 pagination/templates/pagination/pagination.html ,我们需要按我们站点的UI美观需要来更改它哦。

小结:

怎么样,使用django-pagination后,大家肯定会觉得:“哇,太好用啦”,什么事都帮我们做啦。是不是非常方便呢? :)

关于性能:

还有一个问题没有解决哦,因为肯定有朋友会问,如果一个列表有100000个item, 我们想要实现每页40个,那么,当将我们请求该列表时, django-pagination在分页过程中,请求数据库是取40个,还是取100000啊!

显然,django-pagination是不可能取100000的啦。

django-pagination 巧妙的利用了Django延迟获取数据的特性,因此,django-pagination每次取数据都是只取每页的数据的(也就是上例中的40个),所以是不会有性能 影响 的哦。

关于这个问题,作者的主页有两个视频解释:(英文视频,E文可以的同学可以看看)

http://eflorenzano.com/blog/2008/07/12/first-two-django-screencasts/

django-pagination---七步教你实现Django网站列表自动分页相关推荐

  1. 用计算机绘制火灾逃生路线图,七步教你和孩子一起画火灾逃生示意图

    原标题:七步教你和孩子一起画火灾逃生示意图 ↓ ↓ ↓ 第一步 画一幅你家的平面图.如果你的房子超过一层,记得每层都画平面图. 第二步 标出所有可能的逃生出口.要把所有房门.窗户.楼梯都标注在图上,这 ...

  2. 从无到有:七步教你做数值(3)

    第七步:数据验证 当我们做好了前面所有的一切,不是大功就告成了,还需要数据验证来验证我们的设计目的 Ø 阶段验收 不同阶段不同验收方法 l GR2阶段 验证数值的功能正确性,是否和文档机制一样无偏差 ...

  3. 从无到有:七步教你做数值(1)

    引言: 很多策划都是从系统策划转数值策划,不清楚数值策划到底需要做些什么,怎么做,从什么步骤开始,无从做起,他们希望能知道从无到有的几个流程,一些常用的数值公式,一些常用的方法论,回想自己在音速做过运 ...

  4. 七步教你制定网站SEO整体优化方案

    不管是我们为自己的网站做SEO还是给自己公司的网站优化,又或者是给客户提供SEO服务,晓泉都希望大家能在SEO工作开始之前做好一份详细的SEO方案,不要怕费时间,只有有计划地去工作,才能让效率大大地提 ...

  5. 七步教你从0到1创建客户服务团队

    建立客户服务团队就像安装书架一样, 每个书架各有不同,安装方式也各不相同,但是有一些可以借鉴的"说明书",如果没有计划与策略支持,可能会导致方向上的错误.无论你是从头开始创建用户服 ...

  6. 从无到有:七步教你做数值(2)

    第四步:成长系统 搭好了的战斗系统,接下来就需要拆分人物的属性,在成长中逐步投放出去,让玩家有短期长期的追求. Ø 属性拆分 一个人物的战斗力由很多部分组成: 裸身,宠物,装备,法宝,技能,坐骑等等, ...

  7. android裁剪图片功能,实战:七步教你Android图片拍摄及剪裁

    [IT168技术]现在,很多Android设备都有内置的摄象头了,在本教程中,我们将学习如何在程序中调用Android手机中的摄象头进行图像的摄制,并且如何在拍摄照片后,如何利用用户已经安装在设备中的 ...

  8. 简单七步让你轻松安全迁移网站

    因为种种原因,更换迁移网站是不可避免的,那么怎样从一个主机迁移到另一个主机呢,又能避免网站因迁移而造成的不必要损失,这其中需要一定的技巧,下面来看看,具体操作.     一.更换虚拟主机的前期准备   ...

  9. combobox 怎么实现对listview的类别查询_通过 Django Pagination 实现简单分页

    作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 当博客上发布的文章越来越多时,通常需要进行分页显示,以免所有的文章都堆积在一个页面,影 ...

最新文章

  1. R语言ggplot2可视化时间序列数据:ggplot2可视化在时间轴上添加按月的箱图(boxplot)
  2. 网络的网络——当今的互联网
  3. tiptop 编译运行_tiptop客制规范总结
  4. 利用 UML 进行实体关系建模
  5. 33种编程语言为您送上祝福,新年快乐!
  6. 一位质量总监的“发飙”
  7. C++ STL容器vector篇(三) vector容器大小和数组大小, 插入和删除元素, 存储和读取元素
  8. 较全的正则字符、规则汇总
  9. DNS的更新和ddns(动态域名解析)
  10. c加加中print是什么意思_Java中的null到底是什么意思?
  11. html导航栏前面有图片,CSS带图片的漂亮导航菜单
  12. 智能车摄像头组怎么在OLED屏画出中线
  13. Jquery实现遮罩
  14. Java8新特性(三) – 流式数据处理
  15. HTPP的请求方式有哪些?
  16. Linux 防火墙简介
  17. 机器学习笔记~图像的空间分辨率
  18. json和pickle的数据序列化
  19. BUCK电路输入电容计算
  20. 用三年都不会卡,Reno5系列恋恋青风,这方面体验确实顶

热门文章

  1. 【设计模式】责任链模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )
  2. 【错误记录】前台进程报错 ( Bad notification for startForeground invalid channel for service notification )
  3. 【数据挖掘】数据挖掘算法 组件化思想 ( 模型或模式结构 | 数据挖掘任务 | 评分函数 | 搜索和优化算法 | 数据管理策略 )
  4. 关于动态门户WEB博雅互动的源代码(HTML+CSS+javascript)
  5. python学习-练习题兔子生长问题巩固
  6. 利用Python自动生成暴力破解的字典
  7. 67. Add Binary
  8. 数字数据fzu 2120 数字排列
  9. poj1088 滑雪
  10. Windows 下启动前删除Resin日志等文件的bat命令