django之快速分页
本文介绍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之快速分页的更多相关文章
- django: rest-framework的 分页和过滤
django: rest-framework的 分页和过滤 2018年06月28日 10:09:01 weixin_42359464 阅读数:136 标签: flaskrestframeworkdja ...
- MySQL大数据量快速分页实现(转载)
在mysql中如果是小数据量分页我们直接使用limit x,y即可,但是如果千万数据使用这样你无法正常使用分页功能了,那么大数据量要如何构造sql查询分页呢? 般刚开始学SQL语句的时候,会这 ...
- MVC快速分页
.NET手记-ASP.NET MVC快速分页的实现 对于Web应用,展示List是很常见的需求,随之而来的常见的分页组件.jQuery有现成的分页组件,网上也有着大量的第三方分页组件,都能够快速实 ...
- Django内置分页
一.django内置分页 from django.shortcuts import render from django.core.paginator import Paginator, EmptyP ...
- ssm+maven+pageHelper搭建maven项目实现快速分页
ssm+maven+pageHelper搭建maven项目实现快速分页 PageHelper分页使用: 插件的环境引入: 1.pom文件中引入分页插件的资源位置: <dependency> ...
- .NET手记-ASP.NET MVC快速分页的实现
对于Web应用,展示List是很常见的需求,随之而来的常见的分页组件.jQuery有现成的分页组件,网上也有着大量的第三方分页组件,都能够快速实现分页功能.但是今天我描述的是用基本的C#和html代码 ...
- 如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案
如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案
- Django中的分页,cookies与session
cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...
- MySQL 百万级分页优化(Mysql千万级快速分页)(转)
http://www.jb51.net/article/31868.htm 以下分享一点我的经验 一般刚开始学SQL的时候,会这样写 复制代码 代码如下: SELECT * FROM table OR ...
随机推荐
- STL中队列(queue)的使用方法
STL 中队列的使用(queue) 基本操作: push(x) 将x压入队列的末端 pop() 弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值 front() 返回第一个元素(队顶元素) ...
- BestCoder Round #34_1002 以及 hdu 5191
枚举最终的W堆积木在哪,确定了区间,那么就需要把高于H的拿走,低于H的补上,高处的积木放到矮的上面,这样最优. 注意多出来的积木可以放在已有积木的前面或者后面,独立成一堆积木,所以需要在n堆积木的前后 ...
- Java面试准备之集合框架
集合框架 Collection:List列表,Set集 Map:Hashtable,HashMap,TreeMap Collection 是单列集合 List 元素是有序的(元素存取是有序).可重复 ...
- 高新技术---枚举及部分JDK1.5新特性
第一讲 枚举 一.概述 这里说的枚举,不是集合vector的特有枚举迭代器,而是JDK1.5的一个新特性.之所以单独拿它开刷,是这个知识点比较重要,同时相对来说比较难理解一些. 为什么要有枚举 ...
- [2017-08-09]一则使用WinDbg工具调试iis进程调查内存占用过高的案例
最近遇到一个奇葩内存问题,跟了三四天,把Windbg玩熟了,所以打算分享下. 症状简介 我们团队的DEV开发环境只有一台4核16G的win2012r2. 这台服务器上装了SqlServer.TFS(项 ...
- 浅述 Java 并发
浅述 Java 并发 volatile volatile只能保证变量对各个线程的可见性,但不能保证原子性.关于 Java语言 volatile 的使用方法就不多说了,我的建议是 除了 配合packag ...
- 在ubantu上安装hive
上次我们在ubantu上安装了hadoop,那我们现在再进一步,开始我们的学习之旅--hive板块吧! 第一步:准备! 软件: I.一个搭建好的hadoop环境 II.hive的bin文件(前往apa ...
- pythonl练习
练习:用户输入姓名.年龄.工作.爱好 ,然后打印成以下格式 ------------ info of Egon ----------- Name : Egon Age : 22 Sex : male ...
- 使用 PUTTY 操作 Google Cloud
目的: 使用putty连接Google Cloud 实例. 总说: 首先要用 PuTTYgen生成 private key 和 public key, 之后 登录Google Cloud 将生成的 ...
- 大型网站的 HTTPS 实践(四)——协议层以外的实践
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt390 1 前言 网上介绍 https 的文章并不多,更鲜有分享在大型互联网站 ...