45)django-分页实现
Django提供了一个新的类来帮助你管理分页数据,.它可以接收列表、元组或其它可迭代的对象。
一:常用方法
>>> 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
二:定义工具
定义工具,可供多个页面使用。
效果如下:

1)定义方法:pages.py
# -*- coding:utf-8 -*-
__author__ = 'lixiang' from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger def page(request,post_objects,page_number=20):
"""
实现分页
:param request: view中request
:param post_objects: 需要实现分页的对象(列表,queryset)
:param page_number: #每页显示条数,默认20页
:return:
"""
#实例化结果集, queryset转列表
post_objects=list(post_objects)
paginator = Paginator(post_objects, page_number) # Show 20 contacts per page #获取htmml中传递page值
page = request.GET.get('page',1)
try:
#需要返回的值
page_objs = paginator.page(page)
except PageNotAnInteger:
# 如果page不是整数,返回第1页
page_objs = paginator.page(1)
except EmptyPage:
# 如果page超出最大值 ,只显示最后一页
page_objs = paginator.page(paginator.num_pages) return page_objs
2)定义模板:paginator.html
<!--显示记录数-->
<div class="dataTables_info" id="editable_info" role="status" aria-live="polite">
显示 {{ page_objs.start_index }} 至 {{ page_objs.end_index }} 条,共 {{ page_objs.paginator.count }} 条记录
</div>
<div class="text-right">
{% load page_tag %}
<ul class="pagination">
<!--显示首页和上一页-->
{% if page_objs.has_previous %}
<li class="footable-page-arrow"><a data-page="first" href="?page=1">首页</a></li>
<li class="footable-page-arrow"><a data-page="prev"
href="?page={{ page_objs.previous_page_number }}">上一页</a></li>
{% endif %}
<!--显示页码,只通过自定义tag,实现只显示3个页码,-->
{% for pg in page_objs.paginator.page_range %}
<!--参数:当前页,循环页-->
{% page_curent_show page_objs.number pg %}
{% endfor %} <!--显示尾页和下一页-->
{% if page_objs.has_next %}
<li class="footable-page-arrow"><a data-page="next" href="?page={{ page_objs.next_page_number }}">下一页</a>
</li>
<li class="footable-page-arrow"><a data-page="last" href="?page={{ page_objs.paginator.num_pages }}">尾页</a>
</li>
{% endif %}
</ul>
</div>
3)显示页码,通过自定义tag,实现只显示3个页码:page_tag.py
# -*- coding:utf-8 -*-
__author__ = 'lixiang'
from django import template
from django.utils.html import format_html
register=template.Library() @register.simple_tag
def page_curent_show(current_page,loop_page):
"""只显示3页码"""
offset=abs(current_page-loop_page)
if offset<3:
if current_page==loop_page:
#激活当前页
page_ele='<li class="footable-page active"><a data-page="1" href="?page=%s">%s</a></li>' %(loop_page,loop_page)
else:
page_ele='<li class="footable-page"><a data-page="1" href="?page=%s">%s</a></li>' %(loop_page,loop_page) return format_html(page_ele)
else:
return ""
4)视图调用示例
from utils.pages import page def menu_list(request):
menu_objs=models.Menu.objects.all()
page_objs=page(request,menu_objs,2)
return render(request, "juser/menu_list.html",{"page_objs":page_objs})
5)页面嵌入分页
<table id="demo-foo-addrow"
class="table table-bordered table-hover toggle-circle footable-loaded footable default"
data-page-size="">
<thead>
<tr>
<th data-sort-ignore="true" class="min-width footable-visible footable-first-column"></th>
<th data-sort-initial="true" data-toggle="true"
class="footable-visible footable-sortable footable-sorted">序号<span
class="footable-sort-indicator"></span></th>
<th class="footable-visible footable-sortable">菜单名<span
class="footable-sort-indicator"></span></th>
<th data-hide="phone, tablet" class="footable-visible footable-sortable">菜单位置<span
class="footable-sort-indicator"></span></th>
<th data-hide="phone, tablet" class="footable-visible footable-last-column footable-sortable">
操作<span
class="footable-sort-indicator"></span></th>
</tr>
</thead> <tbody> {% for menu_obj in page_objs %}
<tr class="footable-even" style="display: table-row;">
<td class="footable-visible footable-first-column">
<button class="demo-delete-row btn btn-danger btn-xs"><i class="demo-pli-cross"></i>
</button>
</td>
<td class="footable-visible"><span class="footable-toggle"></span>{{ forloop.counter }}</td>
<td class="footable-visible">{{ menu_obj.name }}</td>
<td class="footable-visible">{{ menu_obj.seq }}</td>
<td class="footable-visible">
<a><span class="label label-success">查看</span></a>
<a><span class="label label-dark">编辑</span></a>
<a><span class="label label-table label-danger">删除</span></a>
</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
<tr>
<td colspan="" class="footable-visible">
{% include "paginator.html" %}
</td>
</tr>
</tfoot>
</table>
</div>
45)django-分页实现的更多相关文章
- django 分页组件
一.仿django分页功能自己实现 urls.py 1 2 3 4 5 6 7 8 9 from django.conf.urls import url from django.contrib i ...
- django 分页(2) 使用类 页码显示
django 分页显示页码 views.py 显示11页码 ) < 起始位置 - 10总页数 else 总页数 > IF 当前页 小于 起始位置 结束页 IF 当前页 大于 IF 如果结束 ...
- Django 分页功能
Django 分页功能比较强大,这边是结合官网的内容写的可以参考 https://docs.djangoproject.com/en/1.9/topics/pagination/ 分页命令行练习案列 ...
- 原生的 django 分页
原始的 django 分页 # 基本 写法 class Paginator(object): def __init__(self, object_list, per_page, orphans=0, ...
- Django分页(二)
Django分页(二) 要求 .设定每页显示数据条数 # # .用户输入页码(第一页.第二页...) # # .设定显示多少页号 # # .获取当前数据总条数 # # .根据设定显示多少页号和数据总条 ...
- Django分页(一)
Django分页(一) 手动实现简单分页 HTML <!DOCTYPE html> <html lang="en"> <head> <me ...
- django 分页出现 UnorderedObjectListWarning 错误
django 分页出现此错误: UnorderedObjectListWarning: Pagination may yield inconsistent results with an unorde ...
- 2019.03.20 mvt,Django分页
MVT模式 MVT各部分的功能: M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理. V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返 ...
- Django分页类的封装
Django分页类的封装 Django ORM 封装 之前有提到(Django分页的实现)会多次用到分页,将分页功能封装起来能极大提高效率. 其实不是很难,就是将之前实现的代码全都放到类中,将需要用 ...
- Django分页的实现
Django分页的实现 Django ORM 分页介绍 分页是网页浏览中常见到的一种形式,在数据量较大时,一个页面显示不全,采取分割数据由用户选择进行显示的方式. 基本实现 技术点 通过切片得到数据 ...
随机推荐
- Linux 用top命令查看CPU和内存使用情况
直接 top 回车 PID:进程的ID USER:进程所有者 PR:进程的优先级别,越小越优先被执行 NInice:值 VIRT:进程占用的虚拟内存 RES:进程占用的物理内存 SHR:进程使用的共享 ...
- 13.CrawlSpider类爬虫
1.CrawlSpider介绍 Scrapy框架中分两类爬虫,Spider类和CrawlSpider类. 此案例采用的是CrawlSpider类实现爬虫. 它是Spider的派生类,Spider类的设 ...
- 【51nod 1331】狭窄的通道
Description 有一个长为L的狭窄通道,我们假设这个通道在x轴上,其两个出口分别在x=0与x=L处.在这个通道里有N只狼,第i只狼有一个初始位置ai,它想到达位置bi(0<=i<N ...
- Zipkin 分布式数据追踪系统
Zipkin 是一个分布式数据追踪系统,适用于微服务架构下的调用链路数据采集及分析工作. 可通过一个 Web 前端轻松的收集和分析数据,例如用户每次请求服务的处理时间等,可方便的监测系统中存在的瓶颈. ...
- luogu P3245 [HNOI2016]大数
传送门 \(HNOI2019\)前最后一题了qwq 这题要分情况,如果\(p=2\)或\(5\),那么只要区间内最后一个数字是\(p\)的倍数就好了,这个可以莫队,也有更优秀的做法.莫队做法可以看代码 ...
- windows平台下利用Nginx做负载均衡
1.下载nginx(http://nginx.org/en/download.html)安装包,解压,并使用cmd命令转到nginx.exe所在的目录 2.执行cmd命令start nginx启动ng ...
- Codeforces #662C Binary Table
听说这是一道$ Tourist$现场没出的题 Codeforces #662C 题意: 给定$n*m的 01$矩阵,可以任意反转一行/列($0$变$1$,$1$变$0$),求最少$ 1$的数量 $ n ...
- ubuntu 简单安装配置gitlab
安装 gitlab-ce 社区版 依赖 sudo apt-get install curl openssh-server ca-certificates postfix 添加gitlab包服务并安装 ...
- asyncio模块中的Future和Task
task是可以理解为单个coroutine,经过ensure_future方法处理而形成,而众多task所组成的集合经过asyncio.gather处理而形成一个future. 再不精确的粗略的说 ...
- Ajax——从服务器获取各种文件
ajax.js内容 function ajax(url,fnWin,fnFaild){ //1.创建ajax对象 var xhr = window.XMLHttpRequest ? new XMLHt ...