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 分页介绍 分页是网页浏览中常见到的一种形式,在数据量较大时,一个页面显示不全,采取分割数据由用户选择进行显示的方式. 基本实现 技术点 通过切片得到数据 ...
随机推荐
- [译]Debug ASP.NET Core 2.0源代码
原文 首先你的VS必须为VS 2017 15.3或以上版本. 打开你的Startup类,在ConfigureServices方法上设置个断点,按F5 Debug应用. 在Call Stack(调用堆栈 ...
- table的复制 SqlServer 数据库添加临时表(select 字段1,字段2,字段3 into)
select 字段1,字段2,字段3 into tempname form table where table.id=1; oralce : insert into MID_DRUG_DETA ...
- Linux 下杀毒可用工具 clamav
clamav 杀毒工具:Linux下可用的杀毒工具: 下载地址: 最新 包 0.101 官网下载地址:http://www.clamav.net/downloads最新包地址: https://cla ...
- Java SE之XML<一>XML文档规约
[文档整理系列] Java SE之XML<一>XML文档规约 1.xml文档引用: 1.外部私有DTD: <!DOCTYPE rootNodeName SYSTEM "ur ...
- RESTful API学习Day2 - Django REST framework
Django REST framework 参考文档: 官方文档:官方文档 中文文档:中文文档 一.是什么? 基于Django开发RESTful API的一个框架 为什么要用它? 补充: CBV的 ...
- webwork框架
以前都没有用过WebWork这个框架,只是听说过.没想到现在要用,所以就自学了一下.做了个小例子给大家分享下中间遇到的苦难和经验. 准备工作:首先要去下载WebWork框架的开发包.我用的2.2.6版 ...
- Git命令执行漏洞
Git命令造成的反弹shell 漏洞描述: Git LFS可以.lfsconfig使用LFS由存储库中的文件配置(部分),并且可以将Git LFS指向ssh://. [lfs] url = ssh:/ ...
- Fragment回退栈&commit()和commitAllowingStateLoss()
Activity切换时是通过栈的形式,不断压栈出栈,在Fragment的时候,如果你不是手动开启回退栈,它是直接销毁再重建,但如果将Fragment任务添加到回退栈,情况就会不一样了,它就有了类似Ac ...
- python正则下载图片
import urllib.request import re # 打开图片路径 def open_url(url): #设置请求路径 req = urllib.request.Request(url ...
- 应急响应-GHO提取注册表快照
前言 备份文件.gho中找到机器的注册表 文件夹位置 在 C:\WINDOWS\SYSTEM32\CONFIG 下就是系统的注册表,一般情况下,这里面会有以下几个文件: default 默认注册表文件 ...