基本语法

下面展示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分页的更多相关文章

  1. Slider 滚动条 Pagination分页插件 JS Ajax 数据范围筛选 加载 翻页 笔记

    入职以后的第二个任务  根据用户所选的价格范围 筛选数据 修复BUG - 筛选数据后 总数没有更新.列表显示错误.翻页加载错误 用到的一些知识点 jquery插件系列之 - Slider滑块 max ...

  2. EasyUI基础入门之Pagination(分页)

    前言 对于一些企业级的应用来说(非站点),页面上最为基本的内容也就是表格和form了.对于类似于ERP这类系统来说数据记录比較大,前端表格展示的时候必需得实现分页功能了.恰巧EasyUI就提供了分页组 ...

  3. doT.js模板和pagination分页应用

    doT.js模板和pagination分页应用 博客中模拟了数据加载初始化的过程.doT.js渲染每一项内容的数据项.示例如下: <script id="Messtmpl" ...

  4. jQuery Pagination分页插件

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. 第二百零九节,jQuery EasyUI,Pagination(分页)组件

    jQuery EasyUI,Pagination(分页)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 Pagination(分页)组件的使 ...

  6. Django框架 之 Pagination分页实现

    Django框架 之 Pagination分页实现 浏览目录 自定义分页 Django内置分页 一.自定义分页 1.基础版自定义分页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  7. jQuery Pagination分页插件--刷新

    源码地址:https://github.com/SeaLee02/FunctionModule/blob/master/UploadFiles/WebDemo/FenYE/FenYeDemo.aspx ...

  8. Angular pagination分页模块 只提供分页参数处理 不处理分页记录数据

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 手把手教你使用Vue/React/Angular三大框架开发Pagination分页组件

    DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师.官方网站:devui.designNg组件库:ng-devui(欢迎S ...

  10. jq pagination分页 全选、单选的思考

    $().pagination(总条数,配置项); 后端分页的跨页选择: 思路:把浏览过的页整体保存为,整体拥有 curPage(当前页码).allChoice(当前页是否全选).selected当前页 ...

随机推荐

  1. javascript: what can javascript do?

    1.Javascript can change html content <!DOCTYPE html> <html> <body> <h2>What ...

  2. Delphi Xe4 游戏开发的技术选型.

    asphyre 是支持 FireMonkey的. 利用Firemonkey的跨平台接口.实现 win,mac,ios. 其它方案估计就得靠 FPC 了. 好处是多了输出Andriod的可能. zeng ...

  3. Solr初步使用

    参考此文:https://blog.csdn.net/frankcheng5143/article/details/71159936

  4. Rhel7安装及网卡、yum、vmtools配置和修改主机名

    (1)安装Vmware WorkStation 11.0 和 RetHatEnterpriseLinux[RHEL]7.0 步骤就不描述了,网上都可以找到 (2)安装VMware Tools )虚拟机 ...

  5. vc++ windows 创建桌面快捷方式

    创建桌面快捷方式 在windows软件开发中,软件安装过程中总是需要在桌面创建快捷方式,下面介绍一种创建桌面快捷方式的方法,具体代码如下: /* * 创建快捷方式 * szExePath[in]:要创 ...

  6. Servlet、Filter、Listener

    1.Servlet 1.1servlet接口 All Known Implementing Classes:GenericServlet, HttpServlet GenericServlet:与协议 ...

  7. Windows下通过Composer安装Yii2 [ 2.0 版本 ]

    安装好大于5.4或更高版本的PHP环境并开启openssl扩展.如果是Apache服务器,加载Apache的mod_ssl模块. 下载Composer并安装. 开始->运行[或者WIN+R]-& ...

  8. 51nod 1965 奇怪的式子 —— min_25筛

    题目:http://www.51nod.com/Challenge/Problem.html#!#problemId=1965 推式子就同这里:https://www.cnblogs.com/yoyo ...

  9. 使用wireshark观察SSL/TLS握手过程--双向认证/单向认证

    SSL/TLS握手过程可以分成两种类型: 1)SSL/TLS 双向认证,就是双方都会互相认证,也就是两者之间将会交换证书.2)SSL/TLS 单向认证,客户端会认证服务器端身份,而服务器端不会去对客户 ...

  10. 生成器+列表生成式,生成器可以节省内存,随时调取函数运行,以及实现多线程运行函数,__next__()和.send(参数)的区别,a,b=b,a+b其实是元祖的用法,出现异常状态用try...except StopIteration来处理

    列表生成式:是代码更简洁. 也可以是函数,比如func(i) 生成器:generator 列表生成式,是中括号,改成小括号,就是生成器: 如果你用列表生成式,生成一亿个数据:这里会卡好久,会生成一亿个 ...