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 分页介绍 分页是网页浏览中常见到的一种形式,在数据量较大时,一个页面显示不全,采取分割数据由用户选择进行显示的方式. 基本实现 技术点 通过切片得到数据 ...
随机推荐
- Nginx负载均衡session会话保持方法
负载均衡时,为了保证同一用户session会被分配到同一台服务器上,可以使用以下方法: 1.使用cookie 将用户的session存入cookie里,当用户分配到不同的服务器时,先判断服务器是否存在 ...
- 22.doublewrite/ChangeBuffer/AHI/FNP
一. Double Write1 Double Write介绍 • Double Write的目的是为了保证数据写入的可靠性, 避免partial write 的情况 ◦ partial write( ...
- 使用phpexcel上传下载excel文件
1. 下载 <?php /** * Created by lonm.shi. * Date: 2012-02-09 * Time: 下午4:54 * To change this templat ...
- 【python小练】0013
第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-) 科科...妹子就算了,大晚上的爬点吃的吧.食物图集:抿一口,舔一舔,扭一扭~·SCD 写个简单的爬图爬虫 ...
- Log4j2 快速开始
1.配置 默认 Log4j2可以将自己配置为记录错误及更高级别日志,并将消息记录到控制台中. [显示配置]1.检测log4j.configurationFile系统属性,如果属性存在,就从指定文件加载 ...
- JS算法练习一
JS算法练习 1.随机生成一个五位以内的数,然后输出该数共有多少位,每位分别是什么? ①.数组添加元素的方式得到位数(数组长度)与值(数组元素) ①.数组添加元素的方式得到位数(数组长度)与值(数组元 ...
- sap部署
SAP部署 连接sap系统需要通过sap javaconnect来连接,对于sapjco.jar系列文件有32位与64位之分.即对jdk有严格要求.现说明客户端部署及服务端部署两种情况: 一. 部署客 ...
- fastclick.js插件使用简单说明
为什么存在延迟? 从点击屏幕上的元素到触发元素的 click 事件,移动浏览器会有大约 300 毫秒的等待时间.为什么这么设计呢? 因为它想看看你是不是要进行双击(double tap)操作. ...
- day 8 - 2 文件操作练习
注册登录 需求: 1.对账号密码的长度进行限制并不允许出现特殊字符 2.把账号密码储存进文件中 3.密码最多输入错误三次 #分别判断注册时账号密码的长度与特殊字符 flag=1 while flag: ...
- 《shiro》视频目录---1、权限管理-shiro
\day01_shiro\0323\10realm支持散列.avi;\day01_shiro\0323\1权限管理原理.avi;\day01_shiro\0323\2权限管理解决方案.avi;\day ...