Pagination分页
基本语法
下面展示Paginator的基本使用
>>> from django.core.paginator import Paginator
>>> objects = ['john', 'paul', 'george', 'ringo']
>>> p = Paginator(objects, 2)
>>> p.count
4
>>> p.num_pages
2
>>> type(p.page_range)
<class 'range_iterator'>
>>> p.page_range
range(1, 3)
>>> page1 = p.page(1)
>>> page1
<Page 1 of 2>
>>> page1.object_list
['john', 'paul']
>>> page2 = p.page(2)
>>> page2.object_list
['george', 'ringo']
>>> page2.has_next()
False
>>> page2.has_previous()
True
>>> page2.has_other_pages()
True
>>> page2.next_page_number()
Traceback (most recent call last):
...
EmptyPage: That page contains no results
>>> page2.previous_page_number()
1
>>> page2.start_index() # The 1-based index of the first item on this page
3
>>> page2.end_index() # The 1-based index of the last item on this page
4
>>> p.page(0)
Traceback (most recent call last):
...
EmptyPage: That page number is less than 1
>>> p.page(3)
Traceback (most recent call last):
...
EmptyPage: That page contains no results
实际应用
编写视图
class TaskListPageView(View):
def get(self, request, page=None):
if page:
page_num = int(page)
else:
page_num = 1
# 每页10条数据
p = Paginator(tasks_all, 10) # 假设tasks_all是所有的待分页的数据集
# page_num页码的数据
tasks = p.page(page_num)
# 总页数
page_count = p.num_pages
# 获取分页器的页码列表,得到当前页最近的7个页码
page_num_list = get_page_num_list(page_count, page_num, 7)
context = {
"tasks": tasks,
"last_page": page_count,
"page_num_list": page_num_list,
}
return render(request=request, template_name="task/list.html", context=context)
在分页时,我们需要获取到当前的页码来展示对应页码的数据,上面页码传递采用的方式是url传递,在此处用get方法的page参数接收。
当然再传递页码时也可以采用常用的get参数传递,即放在路径的”?“后面,这样传递的话就要使用request.GET.get['page']来获取。
编写路径
path('list/<int:page>', task.TaskListPageView.as_view(), name='list'),
如上面所说的,我们在这里将页码参数page放在url中传递给视图。
编写页面
<div class="page">
{% if tasks.has_previous %}
<a href="javascript:page_href(1)">首页</a>
<a href="javascript:page_href({{ tasks.previous_page_number }})">上一页</a>
{% else %}
<a class="page-disabled">首页</a>
<a class="page-disabled">上一页</a>
{% endif %}
{% for page in page_num_list %}
{% ifequal page tasks.number %}
<a class="page-tag active" href="javascript:page_href({{ page }})">
{{ page }}
</a>
{% else %}
<a class="page-tag" href="javascript:page_href({{ page }})">
{{ page }}
</a>
{% endifequal %}
{% endfor %}
{% if tasks.has_next %}
<a href="javascript:page_href({{ tasks.next_page_number }})">下一页</a>
<a href="javascript:page_href({{ last_page }})">尾页</a>
{% else %}
<a class="page-disabled">下一页</a>
<a class="page-disabled">尾页</a>
{% endif %}
</div>
在上面展示了页面上的分页栏,这里不对其中的css样式作说明,只关注分页功能。
上面的分页跳转都是通过点击触发一个函数,从而链接到相应的页面。
function page_href(page) {
# 获取当前页面"?"后面的参数
var search = window.location.search;
# 将参数和页码拼接出新的地址
location.href = '/task/list/' + page + search;
}
注意,在我们对搜索结果进行分页时一定要把参数加入到新的中后面,即上面search的内容,否则跳转的是所有结果的页面,而不是搜索结果的页面。
Pagination分页的更多相关文章
- Slider 滚动条 Pagination分页插件 JS Ajax 数据范围筛选 加载 翻页 笔记
入职以后的第二个任务 根据用户所选的价格范围 筛选数据 修复BUG - 筛选数据后 总数没有更新.列表显示错误.翻页加载错误 用到的一些知识点 jquery插件系列之 - Slider滑块 max ...
- EasyUI基础入门之Pagination(分页)
前言 对于一些企业级的应用来说(非站点),页面上最为基本的内容也就是表格和form了.对于类似于ERP这类系统来说数据记录比較大,前端表格展示的时候必需得实现分页功能了.恰巧EasyUI就提供了分页组 ...
- doT.js模板和pagination分页应用
doT.js模板和pagination分页应用 博客中模拟了数据加载初始化的过程.doT.js渲染每一项内容的数据项.示例如下: <script id="Messtmpl" ...
- jQuery Pagination分页插件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 第二百零九节,jQuery EasyUI,Pagination(分页)组件
jQuery EasyUI,Pagination(分页)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 Pagination(分页)组件的使 ...
- Django框架 之 Pagination分页实现
Django框架 之 Pagination分页实现 浏览目录 自定义分页 Django内置分页 一.自定义分页 1.基础版自定义分页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- jQuery Pagination分页插件--刷新
源码地址:https://github.com/SeaLee02/FunctionModule/blob/master/UploadFiles/WebDemo/FenYE/FenYeDemo.aspx ...
- Angular pagination分页模块 只提供分页参数处理 不处理分页记录数据
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 手把手教你使用Vue/React/Angular三大框架开发Pagination分页组件
DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师.官方网站:devui.designNg组件库:ng-devui(欢迎S ...
- jq pagination分页 全选、单选的思考
$().pagination(总条数,配置项); 后端分页的跨页选择: 思路:把浏览过的页整体保存为,整体拥有 curPage(当前页码).allChoice(当前页是否全选).selected当前页 ...
随机推荐
- QT5入门之12 - QDebug输出调试信息
这个很简单,二步即可. 1.添加头文件 #include <qdebug.h> 2.输出信息 qDebug("Test:%d",id); (%d表示整数) 3.格式化信 ...
- Cisco DHCP 配置要点
实验拓扑图:IOU5/6/7模拟主机 IOU1为DHCP服务器 IOU2为DHCP中继器 IOU3/4为局域网内的交换机 在IOU1中配置DHCP配置 IOU2作为DHCP中继,在E0/0.10和E0 ...
- 剑指offer-第五章优化时间和空间效率(在字符串中第一次出现切只出现一次的字符)
题目:在字符串中第一次出现切只出现一次的字符 思路:用HashMap来存放对应的char值和该char出现的次数.做一次变量就可以得到第一个只出现一次的字符. Java代码: import java. ...
- break、continue与return的区别
1. break break语句的使用场合主要是switch语句和循环结构.在循环结构中使用break语句,如果执行了break语句,那么就退出循环,接着执行循环结构下面的第一条语句.如果在多重嵌套循 ...
- Nginx 反向代理与负载均衡详解
序言 Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在Nginx 配置详解中有说明,这篇就开门见山,先描述一些关于代理功能的配置,再说明负载均衡详细. Ngin ...
- dubbo-demo安装运行指南
步骤步骤:1.安装JDK:2.安装Tomcat:3.安装Zookeeper:4.安装Dubbo: 修改Consumer配置文件
- bzoj 3230 相似子串——后缀数组
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3230 作出后缀数组,从 LCP 看每个位置对于本质不同子串的贡献,而且他们已经按前面部分排好 ...
- tomcat启动报错:org.springframework.beans.factory.BeanCreationException
Web容器在启动时加载 spring 配置文件时解析xml失败常常引起容器启动失败.这次配置文件是 ibatis的sql脚本出了问题: Context initialization failed or ...
- 【转】CentOs中Apache开启rewrite模块详解
rewrite是apache环境的一个伪静态功能了,如果我们没有没让Apache开启rewrite功能,网站上所有的rewrite规则都不可使用. centos的配置文件放在: /etc/httpd/ ...
- go语言学习杂记
go语言在windows下下载安装 推荐在golang中国下载 http://www.golangtc.com/download 安装.... go环境变量与工作目录 根据约定GOPATH需要建立3个 ...