1. views.py

def app(request):
page_info = PageInfo(request.GET.get('p'), 6, 100, request.path_info, page_range=7)
return render(request, 'index.html', locals())

2. page.py

 class PageInfo(object):
def __init__(self, current_page, per_age_num, all_count, base_url, page_range=11):
"""
:param current_page: 当前页
:param per_age_num: 每页显示数据条数
:param all_count: 数据库总个数
:param base_url: 页码标签的前缀
:param page_range: 页码个数
:return: 列表-->str
"""
try:
current_page = int(current_page)
except Exception as e:
current_page = 1
self.current_page = current_page
self.per_page_num = per_age_num
self.all_count = all_count
a, b = divmod(all_count, per_age_num)
if b != 0:
self.all_page = a + 1
else:
self.all_page = a self.base_url = base_url
self.page_range = page_range def start(self):
return (self.current_page - 1) * self.per_page_num def end(self):
return self.current_page * self.per_page_num def page_str(self):
"""
:return: list --> str
"""
page_list = [] first_page = "<a href='%s?p=%s'>首页</a>" % (self.base_url, 1)
page_list.append(first_page) if self.current_page <= 1:
prev = "<a href='#'>上一页</a>"
else:
prev = "<a href='%s?p=%s'>上一页</a>" % (self.base_url, self.current_page - 1)
page_list.append(prev) # 只有 8页
if self.all_page <= self.page_range:
start = 1
end = self.all_page + 1
else:
# 页数 18
if self.current_page > int(self.page_range / 2):
# 当前页: 100,101,102
if (self.current_page + int(self.page_range / 2)) > self.all_page:
start = self.all_page - self.page_range + 1
end = self.all_page + 1
# 当前页: 6,7,8,9,10
else:
start = self.current_page - int(self.page_range / 2)
end = self.current_page + int(self.page_range / 2) + 1
else:
# 当前页: 1,2,3,4,5,
start = 1
end = self.page_range + 1 for i in range(start, end):
if self.current_page == i:
temp = '<a class="active" href="%s?p=%s">%s</a>' % (
self.base_url, i, i,)
else:
temp = '<a href="%s?p=%s">%s</a>' % (
self.base_url, i, i,)
page_list.append(temp) if self.current_page >= self.all_page:
nex = "<a href='#'>下一页</a>"
else:
nex = "<a href='%s?p=%s'>下一页</a>" % (self.base_url, self.current_page + 1)
page_list.append(nex) last_page = "<a href='%s?p=%s'>尾页</a>" % (self.base_url, self.all_page)
page_list.append(last_page)
return "".join(page_list)

3. index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="/static/css/commons.css" />
</head>
<body> <!-- 1. 自定义分页 -->
<div class="pagination">
{{ page_info.page_str|safe }}
</div> </body>
</html>

4. common.css

/* 分页开始 */
.pagination{
padding: 10px 0;
}
.pagination a{
display: inline-block;
color: #369;
padding: 6px 10px;
text-align: center;
border: 1px solid #e1e1e1;
margin-right: 6px;
text-decoration: none;
}
.pagination a.active{
border: 0;
}
.pagination a:hover{
background-color: #369;
color: #ffffff;
} /* 分页结束 */

django【自定义分页】的更多相关文章

  1. Django自定义分页并保存搜索条件

    Django自定义分页并保存搜索条件 1.自定义分页组件pagination.py import copy class Pagination: def __init__(self, current_p ...

  2. Django自定义分页、bottle、Flask

    一.使用django实现之定义分页 1.自定义分页在django模板语言中,通过a标签实现; 2.前段a标签使用<a href="/user_list/?page=1"> ...

  3. Django 自定义分页类

    分页类代码: class Page(object): ''' 自定义分页类 可以实现Django ORM数据的的分页展示 输出HTML代码: 使用说明: from utils import mypag ...

  4. Django—自定义分页

    分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应该显示在页面上的数据在数据库表中的起始位置. 确定分页需求: 1. 每页显示的数据条数 2. 每页显示页号链接数 3. 上一页 ...

  5. Django - 自定义分页、FBV和CBV

    一.自定义分页(优势在于能够保存搜索条件) """ 分页组件使用示例: 1) 先取出所有数据USER_LIST 2) 实例化: obj = Pagination(requ ...

  6. Django——自定义分页(可调用)

    1.view from django.shortcuts import render,HttpResponse # Create your views here. from app01.models ...

  7. django 自定义分页,网址存储缓存,CBV

    1. 通过切片控制分页 自定义分页: from django.shortcuts import render # Create your views here. from app01.models i ...

  8. Django自定义分页

    分页 自定义分页 稳扎稳打版 def book(request): # 从URL取参数(访问的页码) page_num = request.GET.get("page") try: ...

  9. django自定义分页控件

    1.准备数据 在models创建测试表 from django.db import models class Host(models.Model): hostname = models.CharFie ...

  10. Django 自定义分页

    1.路由 urls.py url(r'^index2.html/', views.index2), 2.views.py def index2(request): # 数据总条数 当前页 每页显示条数 ...

随机推荐

  1. C#调用C++dll文件 运行提示找不到函数的入口点

    1.首先用DllAnalyzer查看dll的输出函数名,发现输出的函数名有所变化,多了@xxx和一些别的奇怪的字符,实际上是因为C++重载机制造成的,使用使用extern "C"关 ...

  2. Intellij IDEA常用快捷键整理

    ps:使用Intellij IDEA编辑器有蛮长一段时间了.哈哈.整合一下常用的快捷.避免自己以后还要再找. 顺序大概就是从上到下的 Alt + ENTER : 自动修正,提示Alt + Insert ...

  3. VC编译的时候因为加载符号导致编译过程异常缓慢的处理

    之前调试console程序用了一下Ctrl+C,弹出的异常处理选择框自己点了什么忘记了,结果之后再调试,发现特别慢,最下面一直在走着一系列dll的加载符号.让我特别二呼的是断网的话就没事了,联网就一直 ...

  4. html几种美丽的分割线

    一.普通 1.<HR> 2.<HR align=center width=300 color=#987cb9 SIZE=1>align 线条位置(可选left.right.ce ...

  5. Temporal Ensembling for Semi-Supervised Learning

    Laine, Samuli, and Timo Aila. "Temporal Ensembling for Semi-Supervised Learning." arXiv pr ...

  6. 类加载器(ClassLoader)

    静态库.动态连接库 程序编制一般需经编辑.编译.连接.加载和运行几个步骤.在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件:在连接步骤中,连接器将从库文件取得所需的代码,复制 ...

  7. git上解决代码冲突(merge版)

    1.切换到master: git checkout master 2.拉最新代码:git pull origin master 3.切换到提交的分支:git checkout Txxxx 4.合并:g ...

  8. 蓝桥杯 第三届C/C++预赛真题(2) 古堡算式(数学题)

    福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式: ABCDE * ? = EDCBA 他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!” 华生:“我猜也是!” 于是,两人沉默了好久, ...

  9. Chrome 新建自定义标签

    刚开始用Chrome让我最不爽的地方有2个: 1.不能双击关闭标签 2.新建的标签不能是自定义网页 第一个问题通过插件解决了,第二个问题今天也总算找到解决的方法了. 这个方法是自定义插件,需要2个文件 ...

  10. webpack文档翻译

    https://segmentfault.com/a/1190000007568507