本文介绍djanog两种分页,第一是普通分页,第二是使用haystack全文检索的分页。

1.django自带分页功能,这个功能非常好用。
基本知识点:
Django提供了数据分页的类,这些类被定义在django/core/paginator.py中
对象Paginator用于对列进行一页n条数据的分页运算
对象Page用于表示第m页的数据
Paginator对象

方法init(列表,int):返回分页对象,参数为列表数据,每面数据的条数
属性count:返回对象总数
属性num_pages:返回页面总数
属性page_range:返回页码列表,从1开始,例如[1, 2, 3, 4]
方法page(m):返回Page对象,表示第m页的数据,下标以1开始
Page对象

调用Paginator对象的page()方法返回Page对象,不需要手动构造
属性object_list:返回当前页对象的列表
属性number:返回当前是第几页,从1开始
属性paginator:当前页对应的Paginator对象
方法has_next():如果有下一页返回True
方法has_previous():如果有上一页返回True
方法len():返回当前页面对象的个数
迭代页面对象:访问当前页面中的每个对象
使用示例: 普通页面中使用
views.py文件中创建视图page_test
视图代码:
导入模块

from django.core.paginator import Paginator
from .models import *

def index(request):
index= int(request.GET.get('index','1'))
blog = Post.objects.filter(published_date__isnull=False).order_by('-published_date')
page = Paginator(blog,1) #对搜索出来的结果进行分页,一页显示一条
blog = page.page(index) #获取第index 页的数据,这个需要前端用户点击时传过来
context = {"blog":blog}
return render(request,'blog/index.html',context)

模板分页代码:
备注:
has_previous 判断是否有上一页
previous_page_number 获取上一页的页码
paginator.page_range 获取页码列表如:[1,2,3,4,5]
has_next 判断是否还有下一页
next_page_number 获取下一页页码
paginator.num_pages 获取总页数

<div class="pagenation">

{% if blog.has_previous %}
<a href="/?index={{ blog.previous_page_number }}" class="active">上一页</a>
{% else %}
<a href="/?index=1" class="active">上一页</a>

{% endif %}

{% for pindex in blog.paginator.page_range %}
<a href="?index={{ pindex }}" class="active">{{ pindex }}</a>
{% endfor %}

{% if blog.has_next %}
<a href="/?index={{ blog.next_page_number }}" class="active">下一页</a>
{% else %}
<a href="/?index={{ blog.paginator.num_pages }}" class="active">下一页</a>
{% endif %}

</div>

全文检索中的分页:
django 和haystack 版本:
Django (1.8.7)
django-haystack (2.6.1)

注意:这里指的是已经实现全文检索功能后的分页操作:

在项目目录中配置: 这个配置指的是搜索页一页多少条数据
HAYSTACK_SEARCH_RESULTS_PER_PAGE = 10

seach.html 里的配置
备注:
query   搜索关键字,自动传到模板
page_obj 分页后的数据,haystack 自动传到模板
其他方法跟上面的普通页面分页一样使用。

<div class="pagenation">

{% if page_obj.has_previous %}
<a href="/search/?q={{ query }}&page={{ page_obj.previous_page_number }}" >上一页</a>
{% else %}
<a href="/search/?q={{ query }}&page=1" >上一页</a>
{% endif %}

{% for pindex in page_obj.paginator.page_range %}
{% if pindex == page.number %}
<a href="#" class="active">{{ pindex }}</a>
{% else %}
<a href="/search/?q={{ query }}&page={{ pindex }}">{{ pindex }}</a>
{% endif %}
{% endfor %}

{% if page_obj.has_next %}
<a href="/search/?q={{ query }}&page={{ page_obj.next_page_number }}" >下一页</a>
{% else %}
<a href="/search/?q={{ query }}&page={{ page_obj.paginator.num_pages }}" >下一页</a>
{% endif %}

</div>

转载于:https://www.cnblogs.com/huangguifeng/p/7614622.html

django之快速分页相关推荐

  1. Django快速分页

    分页 在web开发中,对大量的商品进行分页显示,是常见的需求,django对分页直接提供了现成的函数,让我们的开发更为快速便捷... 动图_Django快速分页 在后端(视图函数中) from dja ...

  2. Python学习笔记--10.Django框架快速入门之后台管理admin(书籍管理系统)

    Python学习笔记--10.Django框架快速入门之后台管理 一.Django框架介绍 二.创建第一个Django项目 三.应用的创建和使用 四.项目的数据库模型 ORM对象关系映射 sqlite ...

  3. Django框架快速入门之后台管理admin(书籍管理系统)

    Django框架快速入门之后台管理admin(书籍管理系统) 一.Django框架介绍 什么是框架? 软件框架就是为实现或完成某种软件开发时,提供了一些基础的软件产品, 框架的功能类似于 基础设施 , ...

  4. python(十四)--Django学习快速入门

    Django学习快速入门 1. 预备知识 1.1 什么是http协议 1.2 MVC模式和MTV模式 1.2.1 MVC 模式 1.2.2 MTV 模式 2. Django框架介绍 2.1 什么是框架 ...

  5. DataGrid基于Access的快速分页法

    DataGrid基于Access的快速分页法 撰文/ 黎波 DataGrid是一个功能非常强大的ASP.NET Web服务器端控件,它除了能够方便地按各种方式格式化显示表格中的数据,还可以对表格中的数 ...

  6. 计算机桌面分页,电脑word文档怎么快速分页?

    电脑word文档怎么快速分页? word是我们经常使用的办公软件之一.今天小编给大家介绍的就是word实现文档快速分页的方法. 具体如下: 1. 首先我们打开一篇word文档.文档最好有多个段落. 2 ...

  7. MySQL limit 优化,百万至千万级快速分页:复合索引

    2019独角兽企业重金招聘Python工程师标准>>> MySQL 性能到底能有多高?用了php半年多,真正如此深入的去思考这个问题还是从前天开始.有过痛苦有过绝望,到现在充满信心! ...

  8. 千万条数据,Stack Overflow是如何实现快速分页的

    转载自 千万条数据,Stack Overflow是如何实现快速分页的 Stack Overflow 在分页机制中使用页码代替偏移量,页码指向基于 LIMIT 和 OFFSET 的查询.假设要对 100 ...

  9. 使用Django+MySQL快速搭建一个属于自己的网站

    使用Django+MySQL快速搭建一个属于自己的网站 Hello小伙伴们,你们好啊~~ 又是日常get新技能的一天, 今天,咱们来整理一下如何使用VMware Workstation上进行openE ...

最新文章

  1. python post与get的区别_python中get和post有什么区别
  2. 《CCNA无线640-722认证考试指南》——9.3节集中式架构
  3. 模型学习 - SVM
  4. python装饰器 property_python装饰器--@property
  5. android 系统ui修改器,分享两个效果 - Android 系统 UI 管理
  6. 我从创立3家科技公司的经历中学到了什么
  7. 天空象棋——网站与用户
  8. 研究发现,近一半生产容器存在漏洞
  9. MCMC算法大统一: Involutive MCMC
  10. android无线投屏到电视盒子,【沙发管家】教你如何把电脑视频投屏到智能电视/电视盒子上!...
  11. 高分二号、高分一号、资源三号卫星数据1A、2A级别有什么区别?
  12. 雷达基础系列文章之四:雷达专业国内期刊
  13. 供应链金融业务如何脱颖而出?
  14. 计算机软件著作权的注册和认证
  15. 01-Redis核心数据结构和高性能原理
  16. Semantic Segmentation -- (DeepLabv3)Rethinking Atrous Convolution for Semantic Image Segmentation论文解
  17. python中exec的用法_如何在Python中安全地使用exec()?
  18. COVID-19社交数据共享平台,用数据为疫情研究贡献力量
  19. 拷贝信息到usim卡
  20. 蒋涛作序盛赞Leo新作为“程序员职场实用百科全书”——《程序员羊皮卷》连载...

热门文章

  1. 如何通过Maven的Tomcat插件运行Web工程
  2. 一个能自动搜索源文件并自动推导的Makefile
  3. 简单的C++线程类实现, windows平台
  4. 求一个正整数是哪几个正整数相加的和,这些数不能相同
  5. C# GDI+ 实现图片分隔
  6. vue cli3 兼容ie8以上浏览器,前端兼容;解决ie浏览器下白屏问题
  7. [react] react中你用过哪些第三方的中间件
  8. [react] react中调用setState会更新的生命周期有哪几个?
  9. Taro+react开发(38)注意请求接口的/
  10. [vue] ajax、fetch、axios这三都有什么区别?