python__Django 分页
自定义分页的类:
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- # Created by Mona on 2017/9/20
- from django.utils.safestring import mark_safe
- class Paginator:
- '''
- 页码的格式依赖于bootstrap;
- 使用案例:
- from django.shortcuts import render,redirect,HttpResponse
- from app01.models import *
- from tools import page 导入
- def index(request):
- base_url = request.path_info
- total_item_count = UserInfo.objects.all().count()
- current_page = int(request.GET.get('page',1))
- page_obj = page.Paginator(total_item_count,current_page,base_url)
- user_list = UserInfo.objects.all()[page_obj.start:page_obj.end]
- return render(request,'index.html',{'user_list':user_list,'html_page': page_obj.pager})
- '''
- def __init__(self,total_item_count,current_page,base_url,
per_page_item_count=10,show_pager_count=11):- '''
- :param total_item_count: 总记录数
- :param current_page: 当前页码
- :param base_url: 页码的前缀URL
- :param per_page_item_count: 每页显示的记录数
- :param show_pager_count: 显示的页码个数
- '''
- self.total_item_count = total_item_count
- self.current_page = current_page
- self.base_url = base_url
- self.per_page_item_count = per_page_item_count
- self.show_pager_count = show_pager_count
- total_page, res = divmod(self.total_item_count, self.per_page_item_count)
- if res:
- total_page += 1
- self.total_page = total_page
- self.half_show_pager_count = int(total_page/2)
- @property
- def start(self):
- '''
- 页码查询数据的开始位置
- :return:
- '''
- return (self.current_page-1)*self.per_page_item_count
- @property
- def end(self):
- '''
- 页码查询数据的结束位置
- :return:
- '''
- return self.current_page*self.per_page_item_count
- @property
- def pager(self):
- '''
- 返回需要的前端页码
- :return:
- '''
- page_list = []
- ul = ' <ul class="pagination">'
- page_list.append(ul)
- if self.current_page == 1:
- prev = ' <li><a href="#">上一页</a></li>'
- else:
- prev = ' <li><a href="%s?page=%s">上一页</a></li>' % (self.base_url, self.current_page - 1)
- page_list.append(prev)
- # 如果数据特别少:
- if self.total_page < self.show_pager_count:
- pager_start = 1
- pager_end = self.total_page + 1
- else:
- if self.current_page <= self.half_show_pager_count:
- pager_start = 1
- pager_end = self.show_pager_count + 1
- else:
- if self.current_page + self.half_show_pager_count > self.total_page:
- pager_start = self.total_page - self.show_pager_count + 1
- pager_end = self.total_page + 1
- else:
- pager_start = self.current_page - self.half_show_pager_count
- pager_end = self.current_page + self.half_show_pager_count + 1
- for i in range(pager_start, pager_end):
- if i == self.current_page:
- tpl = ' <li class="active"><a href="%s?page=%s">%s</a></li>' % (self.base_url, i, i,)
- else:
- tpl = ' <li><a href="%s?page=%s">%s</a></li>' % (self.base_url, i, i,)
- page_list.append(tpl)
- if self.current_page == self.total_page:
- nex = ' <li><a href="#">下一页</a></li>'
- else:
- nex = ' <li><a href="%s?page=%s">下一页</a></li>' % (self.base_url, self.current_page + 1,)
- page_list.append(nex)
- lu = ' </ul>'
- page_list.append(lu)
- html_page = mark_safe(''.join(page_list))
- return html_page
效果展示:
python__Django 分页的更多相关文章
- 记一次SQLServer的分页优化兼谈谈使用Row_Number()分页存在的问题
最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServerP ...
- js实现前端分页页码管理
用JS实现前端分页页码管理,可以很美观的区分页码显示(这也是参考大多数网站的分页页码展示),能够有很好的用户体验,这也是有业务需要就写了一下,还是新手,经验不足,欢迎指出批评! 首先先看效果图: 这是 ...
- JdbcTemplate+PageImpl实现多表分页查询
一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...
- MVC如何使用开源分页插件shenniu.pager.js
最近比较忙,前期忙公司手机端接口项目,各种开发+调试+发布现在几乎上线无问题了:虽然公司项目忙不过在期间抽空做了两件个人觉得有意义的事情,一者使用aspnetcore开发了个人线上项目(要说线上其实只 ...
- NET Core-TagHelper实现分页标签
这里将要和大家分享的是学习总结使用TagHelper实现分页标签,之前分享过一篇使用HtmlHelper扩展了一个分页写法地址可以点击这里http://www.cnblogs.com/wangrudo ...
- 套用JQuery EasyUI列表显示数据、分页、查询
声明,本博客从csdn搬到cnblogs博客园了,以前的csdn不再更新,朋友们可以到这儿来找我的文章,更多的文章会发表,谢谢关注! 有时候闲的无聊,看到extjs那么肥大,真想把自己的项目改了,最近 ...
- php实现的分页类
php分页类文件: <?php /** file: page.class.php 完美分页类 Page */ class Page { private $total; //数据表中总记录数 pr ...
- C#关于分页显示
---<PS:本人菜鸟,大手子还请高台贵手> 以下是我今天在做分页时所遇到的一个分页显示问题,使用拼写SQL的方式写的,同类型可参考哦~ ------------------------- ...
- JAVA 分页工具类及其使用
Pager.java package pers.kangxu.datautils.common; import java.io.Serializable; import java.util.List; ...
随机推荐
- Sublime 正则 替换方法
- [转]unity3d所要知道的基础知识体系大纲,可以对照着学习,不定期更新 ... ... ... ...
本文献给,想踏入3d游戏客户端开发的初学者. 毕业2年,去年开始9月开始转作手机游戏开发,从那时开始到现在一共面的游戏公司12家,其中知名的包括搜狐畅游.掌趣科技.蓝港在线.玩蟹科技.天神互动.乐元素 ...
- Week 3: Assessing performance 笔记
得到一个模型之后如何评价其性能? training error & generalization error & test error 如何理解generalization error ...
- poj 2594(可相交的最小路径覆盖)
题目链接:http://poj.org/problem?id=2594 思路:本来求最小路径覆盖是不能相交的,那么对于那些本来就可达的点怎么处理,我们可以求一次传递闭包,相当于是加边,这样我们就可以来 ...
- iOS 集成阿里百川最新版(3.1.1.96) 实现淘宝授权登录以及调用淘宝客户端商品详情页
公司最近要做第三方登录,由于是做导购项目,必不可少的有淘宝的授权登录.本来就是一个授权登录,没什么大不了的.但淘宝的无线开放业务——阿里百川更新的最新版本3.1.1.96,开发文档不是不详细,是很 ...
- GOCR v0.50 原理分析
一,简介: GOCR是一个c写的开源OCR库,GNU Public License,作者:Joerg Schulenburg 项目主页:http://jocr.sourceforge.net/inde ...
- day22模块和包
一.模块 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的代码(. ...
- IOS 多线程的一些总结
IOS 多线程 有三种主要方法 (1)NSThread (2)NSOperation (3)** 下面简单介绍这三个方法 1.NSThread 调用方法如下: 如函数需要输入参数, ...
- 47、ListView setSelection() 和 setSelectionFromTop()
http://blog.csdn.net/manoel/article/details/39183025 http://blog.csdn.net/a859522265/article/details ...
- Python2.6升级Python2.7
Python2.6升级2.7 由于Centos6系列自带的python版本为2.6.6,然而有很多应用需要依赖于python2.7来实现,所以有了这个升级的需求.升级原理很简单,无非就是下载.编译.安 ...