django 百度分页算法
效果如下:

脚本:
1. 脚本结构

2.pagination.py
from django.utils.safestring import mark_safe class Page:
'''
current_page: 当前页码
data_count: 数据总个数
per_page_count: 每页展示几个数据
pager_num: 展示页码个数
'''
def __init__(self, current_page, data_count, per_page_count=5, pager_num=6):
self.current_page = current_page
self.data_count = data_count
self.per_page_count = per_page_count
self.pager_num = pager_num @property
def start(self):
return (self.current_page - 1) * self.per_page_count @property
def end(self):
return self.current_page * self.per_page_count @property
def total_count(self):
v, y = divmod(self.data_count, self.per_page_count)
if y:
v += 1
return v def page_str(self, base_url):
page_list = [] first = '<li><a class="page" href="%sp=%s">首页</a></li>' % (base_url, 1,)
page_list.append(first) if self.total_count < self.pager_num:
start_index = 1
end_index = self.total_count + 1
else:
if self.current_page <= (self.pager_num + 1) / 2:
start_index = 1
end_index = self.pager_num + 1
else:
start_index = self.current_page - (self.pager_num - 1) / 2
end_index = self.current_page + (self.pager_num + 1) / 2
if (self.current_page + (self.pager_num - 1) / 2) > self.total_count:
end_index = self.total_count + 1
start_index = self.total_count - self.pager_num + 1 if self.current_page == 1:
prev = '<li><a class="page" href="javascript:void(0);" style="display: none">上一页</a></li>'
else:
prev = '<li><a class="page" href="%sp=%s">上一页</a></li>' % (base_url, self.current_page - 1,)
page_list.append(prev) for i in range(int(start_index), int(end_index)):
if i == self.current_page:
temp = '<li class="active"><a class="page " href="%sp=%s">%s</a></li>' % (base_url, i, i)
else:
temp = '<li ><a class="page" href="%sp=%s">%s</a></li>' % (base_url, i, i)
page_list.append(temp) if self.current_page == self.total_count:
nex = '<li><a class="page" href="javascript:void(0);" style="display: none">下一页</a></li>'
else:
nex = '<li><a class="page" href="%sp=%s">下一页</a></li>' % (base_url, self.current_page + 1,)
page_list.append(nex) last = '<li><a class="page" href="%sp=%s">尾页</a></li>' % (base_url, self.total_count,)
page_list.append(last) total_record = '<span style="display: inline-block;margin-top: 10px;">共%s条记录,共%s页,每页%s条,第%s页</span>' % (self.data_count, self.total_count, self.per_page_count,self.current_page)
page_list.append(total_record)
page_str = mark_safe("".join(page_list)) return page_str
3. view.py
def page(req):
shop_list = ['apple','apple2','apple3','apple4','apple5','apple6','apple7','apple8','apple9']
current_page = req.GET.get('p', 1)
current_page = int(current_page)
page_obj = pagination.Page(current_page, len(shop_list), 2, 4) data = shop_list[page_obj.start:page_obj.end]
print("data:%s"%data) # data:['apple', 'apple2'] page_str = page_obj.page_str('/mytest/page/?')
context = {'page_str':page_str,'data':data}
return render(req,'page.html',context)
4.html.py
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>分页</title>
<link rel="stylesheet" href="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="http://cdn.static.runoob.com/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<style>
ul li{float:left;}
</style>
</head>
<body>
<ul>
{% for i in data %}
<li>{{i}}</li>
{% endfor %}
</ul>
<div style="margin-left: 270px" >
<ul class="pagination">
{{page_str}}
</ul>
</div> </body>
</html>
5.url.py
from django.conf.urls import url
from mytest import views urlpatterns = [
# page
url(r'page/$', views.page),
]
django 百度分页算法的更多相关文章
- django之分页算法实现(Paginator)
导入模块:from django.core.paginator import Paginator 一.Paginator的基本用法: from django.core.paginator import ...
- 使用Mybatis插件 PageHelper 模拟百度分页(Day_20)
生活中,要学会沉淀生命,沉淀心情,沉淀自己 模拟百度分页最终实现效果如图: 本篇博客运行环境 JDK8 + IntelliJ IDEA 2018.3 + Tomcat 8.5.31 准备好了我们就开始 ...
- ASP的高效率的分页算法.net,php同样可以参考
一般习惯使用的有两种分页算法,一是传统的ADO分页,二是SELECT TOP分页算法.对于小型数据表,比如一两万的数据量的表,我倾向使用ADO算法,对于大型的数据表,则必须采用后者的算法了. 先来说说 ...
- 基于视觉的Web页面分页算法VIPS的实现源代码下载
基于视觉的Web页面分页算法VIPS的实现源代码下载 - tingya的专栏 - 博客频道 - CSDN.NET 基于视觉的Web页面分页算法VIPS的实现源代码下载 分类: 技术杂烩 2006-04 ...
- VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法]
VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法] - tingya的专栏 - 博客频道 - CSDN.NET VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法] 分类 ...
- 【转】SQL Server海量数据库的索引、查询优化及分页算法
探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构: CREATE TABLE [dbo]. ...
- 第二十一章 Django的分页与cookie
第二十一章 Django的分页与cookie 第一课 模板 1.模板的继承 在Template目录下新建模板master.html <!DOCTYPE html> <html lan ...
- Python Django的分页,Form验证,中间件
本节内容 Django的分页 Form 中间件 1 Django 分页 1.1 Django自带的分页 1.首先来看下我的测试数据环境 ############ models.py ######### ...
- Django----列表分页(使用Django的分页组件)
目的:是为了实现列表分页 1.定制URL http://127.0.0.1:8000/blog/get_article?page=3之前定制URL是在url后增加了/id,这次使用参数的方式 def ...
随机推荐
- LeetCode.1189-balloon实例数最大值(Maximum Number of Balloons)
这是小川的第次更新,第篇原创 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第267题(顺位题号是1189).给定一个字符串文本,使用文本字符来构成单词"balloon&qu ...
- Leetcode之动态规划(DP)专题-264. 丑数 II(Ugly Number II)
Leetcode之动态规划(DP)专题-264. 丑数 II(Ugly Number II) 编写一个程序,找出第 n 个丑数. 丑数就是只包含质因数 2, 3, 5 的正整数. 示例: 输入: n ...
- Java基础知识常见面试题汇总第一篇
[Java面试题系列]:Java基础知识常见面试题汇总 第一篇 文中面试题从茫茫网海中精心筛选,如有错误,欢迎指正! 1.前言 参加过社招的同学都了解,进入一家公司面试开发岗位时,填写完个人信息后 ...
- 使用nfsstat命令查看NFS服务器状态
转载于:http://www.cnblogs.com/jankie/archive/2011/09/03/2165851.html nfsstat命令显示关于NFS和到内核的远程过程调用(RPC)接口 ...
- PAT 甲级真题题解(121-155)
1121 Damn Single 模拟 // 1121 Damn Single #include <map> #include <vector> #include <cs ...
- web/服务器知识
一 PV 推到出 QPS 你想建设一个能承受500万PV/每天的网站吗? 500万PV是什么概念?服务器每秒要处理多少个请求才能应对?如果计算呢?? PV是什么:PV是page view的简写.PV是 ...
- 使用foreach的禁忌
List<String> list = new ArrayList<>(); Iterator<String> iterator = list.iterator() ...
- Web安全小结之后端
- 洛谷 P1266 速度限制 题解
题面 这道题可以理解为是一个分层图,也可以理解为是二维的SPFA dis[i][j]表示到达i这个点速度为j的最短路 然后跑已经死了的SPFA就好了: #include <bits/stdc++ ...
- GET POST请求区别
cookie .session.tokencookie:存放在浏览器相关的硬盘文件中session:存放在服务器端的内存中,退出后,被清空token:服务器端生成后,不保存,发给客户端,客户端的hea ...