本文介绍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>

django之快速分页的更多相关文章

  1. django: rest-framework的 分页和过滤

    django: rest-framework的 分页和过滤 2018年06月28日 10:09:01 weixin_42359464 阅读数:136 标签: flaskrestframeworkdja ...

  2. MySQL大数据量快速分页实现(转载)

    在mysql中如果是小数据量分页我们直接使用limit x,y即可,但是如果千万数据使用这样你无法正常使用分页功能了,那么大数据量要如何构造sql查询分页呢?     般刚开始学SQL语句的时候,会这 ...

  3. MVC快速分页

    .NET手记-ASP.NET MVC快速分页的实现   对于Web应用,展示List是很常见的需求,随之而来的常见的分页组件.jQuery有现成的分页组件,网上也有着大量的第三方分页组件,都能够快速实 ...

  4. Django内置分页

    一.django内置分页 from django.shortcuts import render from django.core.paginator import Paginator, EmptyP ...

  5. ssm+maven+pageHelper搭建maven项目实现快速分页

    ssm+maven+pageHelper搭建maven项目实现快速分页 PageHelper分页使用: 插件的环境引入: 1.pom文件中引入分页插件的资源位置: <dependency> ...

  6. .NET手记-ASP.NET MVC快速分页的实现

    对于Web应用,展示List是很常见的需求,随之而来的常见的分页组件.jQuery有现成的分页组件,网上也有着大量的第三方分页组件,都能够快速实现分页功能.但是今天我描述的是用基本的C#和html代码 ...

  7. 如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案

    如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案

  8. Django中的分页,cookies与session

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  9. MySQL 百万级分页优化(Mysql千万级快速分页)(转)

    http://www.jb51.net/article/31868.htm 以下分享一点我的经验 一般刚开始学SQL的时候,会这样写 复制代码 代码如下: SELECT * FROM table OR ...

随机推荐

  1. Html5笔记之第八天

    HTML字符实体 显示结果 描述 实体名称 实体编号   空格     < 小于号 < < > 大于号 > > & 和号 & & " ...

  2. macaca测试web小例子

    上午刚把macaca的环境在公司的电脑上吧web 端的环境给搭建好,于是乎,看看网上的例子,看看官方的文档 https://macacajs.github.io/wd.py/ 可以在这个链接看到原滋原 ...

  3. Nginx + Memcached 实现Session共享的负载均衡

    session共享 我们在做站点的试试,通常需要保存用户的一些基本信息,比如登录就会用到Session:当使用Nginx做负载均衡的时候,用户浏览站点的时候会被分配到不同的服务器上,此时如果登录后Se ...

  4. 到处是坑的微信公众号支付开发(java)

    之前公司项目开发中支付是用阿里的支付做的,那叫一个简单,随意:悲催的是,现在公司开发了微信公众号,所以我步入了全是坑的微信支付开发中... ------------------------------ ...

  5. JavaScript中你所不知道的Object(一)

    Object实在是JavaScript中很基础的东西了,在工作中,它只有那么贫瘠的几个用法,让人感觉不过尔尔,但是我们真的了解它吗? 1. 当我们习惯用 var a = { name: 'tarol' ...

  6. 即时作图新工具—ProcessOn【推荐】…

    www.processon.com 推荐这个在线作图网站:免费登录,云端存储,面向对象,最重要的是提供了丰富模板! 在线软件的人气会越来越高,这是趋势啊~

  7. Java8-初识Lambda

    廉颇老矣,尚能饭否 Java,这位已经20多岁的编程语言,称得上是编程语言界的老大哥了.他曾经攻城略地,碾压各路编程语言小弟,风光无限,不可一世.现在,也是家大业大,江湖地位,很难撼动. 但是,这依然 ...

  8. 团队作业4----第一次项目冲刺(Alpha版本)4.25

    a.提供当天站立式会议照片 会议内容: ①:对有的接口编写遇到的困难,由于基础问题,建议百度,谷歌现成的接口 ②:课程较多,时间不够,任务的调整以及进度的调整 b. 每个人的工作 每个人在尽量完成自己 ...

  9. 微信小程序icon,text,progress标签的测试

    一:testIconAndTextAndProgress.wxml的代码如下.testIconAndTextAndProgress.js自动生成示例代码 //testIconAndTextAndPro ...

  10. 【Beta】 第四次Daily Scrum Meeting

    一.本次会议为第四次meeting会议 二.时间:10:00AM-10:20AM 地点:陆大楼 三.会议站立式照片 四.今日任务安排 成员 昨日任务 今日任务 林晓芳 查询app提醒功能模块和用户登录 ...