第三百一十四节,Django框架,自定义分页
第三百一十四节,Django框架,自定义分页
自定义分页模块
#!/usr/bin/env python
#coding:utf-8
from django.utils.safestring import mark_safe #封装分页类模块
class fen_ye_lei:
def __init__(self,dang_qian_ye,shu_ju,tiao_shu,ye_ma_shu,qian_hou_ye,url):
"""
一个参数接收当前页
第一个参数,接收分页数据列表
第二个参数,接收每页显示多少条数据
第三个参数,每页显示多少个页码
第四个参数,显示当前页码前几个和后几个页码,需要结合每页显示多少个页码计算
第五个参数,分页连接url后缀,也就是路由映射的后缀
"""
try: #尝试执行
dang_qian_ye = int(dang_qian_ye) #将当前页换成数字类型
except: #如果出错
dang_qian_ye = 1 #当前页等于1
if dang_qian_ye < 1: #判断当前页如果小于1
dang_qian_ye = 1 #当前页等于1 self.dang_qian_ye = dang_qian_ye #当前页
self.shu_ju = shu_ju #接收分页数据列表
self.tiao_shu = tiao_shu #接收每页显示多少条数据
self.ye_ma_shu = ye_ma_shu #每页显示多少个页码
self.qian_hou_ye = qian_hou_ye #显示当前页码前几个和后几个页码,需要结合每页显示多少个页码计算
self.url = url #分页连接url后缀,也就是路由映射的后缀 # 计算总页码
zong_ye_ma, c = divmod(len(self.shu_ju), self.tiao_shu) #数据总量除以显示条数,取余,两个变量接收,第一个变量得到相除后的整数,后一个变量得到相除后的余数(小数)
if c > 0: #判断余数如果大于0,
zong_ye_ma += 1 #页面数等于整数加1,等于分页总量
self.zong_ye_ma = zong_ye_ma #接收总页码 def shu_ju_fan_wei(self):
"""
shu_ju_fan_wei()方法,返回每页获取范围数据
"""
#换算每页获取范围数据
qi_shi = (self.dang_qian_ye - 1) * self.tiao_shu #当前页码获取数据起始位置
jie_shu = self.dang_qian_ye * self.tiao_shu #当前页码获取数据结束位置
xian_shi = self.shu_ju[qi_shi:jie_shu] #通过起始和结束位置以下标方式获取指定范围的列表数据,xian_shi传到html模板显示数据
return xian_shi def xian_shi_ye_ma(self):
"""
xian_shi_ye_ma()方法,返回页码数据
"""
# 计算每页显示多少个页码
# 假设每页显示11个页码,当前页的前5个和后5个
# 所以需要动态调整循环里的值
if self.zong_ye_ma < self.ye_ma_shu: # 判断总页码小于每页显示多少个页码
s = 1 # 起始页码为1
t = self.zong_ye_ma # 结束页码为总页码
else:
if self.dang_qian_ye <= self.qian_hou_ye + 1: # 判断当前页码小于前后页码数
s = 1 # 起始页码为1
t = self.ye_ma_shu # 结束页码为每页显示多少个页码
else:
if (self.dang_qian_ye + self.qian_hou_ye) > self.zong_ye_ma: # 判断当前页加前后页码数如果大于总页码数
s = self.zong_ye_ma - (self.ye_ma_shu - 1) # 起始页为总页数减以(每页显示多少个页码减一)
t = self.zong_ye_ma # 结束页为总页码数
else:
s = self.dang_qian_ye - self.qian_hou_ye # 起始页为当前页减以前后页码数
t = self.dang_qian_ye + self.qian_hou_ye # 结束页为当前页加前后页码数 ye_ma_lie_biao = [] # 创建列表接收页码数据 #首页
sh_temp = '<li><a href="%s1">首页</a></li>' % (self.url)
ye_ma_lie_biao.append(sh_temp) #上一页
if self.dang_qian_ye <= 1:
shye = '<li><a href="javascript:void(0);">上一页</a></li>'
ye_ma_lie_biao.append(shye)
else:
shye = '<li><a href="%s%s">上一页</a></li>' %(self.url,self.dang_qian_ye-1)
ye_ma_lie_biao.append(shye) for i in range(s, t + 1): # 根据分页总量循环次数
if i == self.dang_qian_ye: # 判断循环到的页码等于当前页面
temp = '<li class="yem"><a href="%s%s">%s</a></li>' % (self.url,i, i) # 格式化当前页码设置样式
else:
temp = '<li><a href="%s%s">%s</a></li>' % (self.url,i, i) # 格式化当前页码
ye_ma_lie_biao.append(temp) # 将格式化的页码数据追加到列表 #下一页
if self.dang_qian_ye >= self.zong_ye_ma:
xye = '<li><a href="javascript:void(0);">下一页</a></li>'
ye_ma_lie_biao.append(xye)
else:
xye = '<li><a href="%s%s">下一页</a></li>' %(self.url,self.dang_qian_ye+1)
ye_ma_lie_biao.append(xye) #尾页
wei_temp = '<li><a href="%s%s">尾页</a></li>' % (self.url,self.zong_ye_ma)
ye_ma_lie_biao.append(wei_temp) xian_shi = "\n".join(ye_ma_lie_biao) # 将页面数据,连接成一个字符串,传输到HTML模板
return mark_safe(xian_shi)
逻辑处理
from django.shortcuts import render,redirect from app1.chajian.fen_ye import fen_ye_lei #导入分页模块
from app1.models import * #导入数据库模块
#逻辑处理模块
def special(request,page):
shuju = shengf.objects.all().values('shf') #获取数据库数据
shuju2 = list(shuju) #将数据转换成列表
fen_ye = fen_ye_lei(page,shuju2,1,3,1,'/bugarticles/') #创建分页对象
fy = fen_ye.xian_shi_ye_ma() #接收分页html
ff = fen_ye.shu_ju_fan_wei #接收分页范围数据
if fen_ye.dang_qian_ye > fen_ye.zong_ye_ma: # 判断分页对象里的当前页码如果大于总页码
zfchdqy = str(fen_ye.zong_ye_ma) # 将总页码转换成字符串
return redirect('/bugarticles/' + zfchdqy) # 跳转到总页码
else:
return render(request, 'app1/index.html',locals())
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" type="text/css" href="/static/css/tou.css">
</head>
<body>
<div>
<ul class="shu">
{% for i in ff %}
<li>{{ i.shf }}</li>
{% endfor %}
</ul>
</div>
<ul class="fy">
{{ fy }}
</ul>
</body>
</html>
第三百一十四节,Django框架,自定义分页的更多相关文章
- 第三百一十八节,Django框架,信号
第三百一十八节,Django框架,信号 Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. 也就是当程序有指定动作时, ...
- 第三百一十三节,Django框架,Session
第三百一十三节,Django框架,Session Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: 1.数据库(默认)2.缓存3.文件4.缓存+数据库5.加密c ...
- 第三百一十九节,Django框架,文件上传
第三百一十九节,Django框架,文件上传 1.自定义上传[推荐] 请求对象.FILES.get()获取上传文件的对象上传对象.name获取上传文件名称上传对象.chunks()获取上传数据包,字节码 ...
- 第三百一十六节,Django框架,中间件
第三百一十六节,Django框架,中间件 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间 ...
- 第三百一十五节,Django框架,CSRF跨站请求伪造
第三百一十五节,Django框架,CSRF跨站请求伪造 全局CSRF 如果要启用防止CSRF跨站请求伪造,就需要在中间件开启CSRF #中间件 MIDDLEWARE = [ 'django.midd ...
- 第三百四十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—craw母版l创建自动爬虫文件—以及 scrapy item loader机制
第三百四十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—craw母版l创建自动爬虫文件—以及 scrapy item loader机制 用命令创建自动爬虫文件 创建爬虫文件是根据scrap ...
- Django框架---- 自定义分页组件
分页的实现与使用 class Pagination(object): """ 自定义分页 """ def __init__(self,cur ...
- 第四百一十四节,python常用算法学习
本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机 ...
- 第二百一十四节,jQuery EasyUI,Calendar(日历)组件
jQuery EasyUI,Calendar(日历)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 Canlendar(日历)组件的使用方法 ...
随机推荐
- 锻造完美U盘小偷:活用消息机制
锻造完美U盘小偷:活用消息机制作者:灰狐来源:灰狐's Blog 注:本文已发表在<黑客防线>2008年第1期,转载请注明出处. 以前经常看到有人做出一些蛮有意思的小工具,其中最多的似乎就 ...
- 使用matlab处理图像的基础知识
MATLAB基本函数一 矩阵运算 1.基本算数运算(加减乘除) + -运算要求矩阵维数相同,例m*n * /运算,例A=B*C,B矩阵是m*n矩阵,B是n*p矩阵,则A是m*p矩阵 A/B相当于A*i ...
- Spring Bean的生命周期详解(转)
Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的.我们通常使用ApplicationContext作为Spring ...
- python(28)获得网卡的IP地址,如何在其他文件夹中导入python模块
获得第几块网卡的ip地址: 如何在其他文件夹中导入模块 import sys sys.path.append('/search/chen/tool')#你的代码存放的目录 from Get_Ip im ...
- ny511 移动小球
移动小球 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 给你n个小球,从左到右编号依次为1,2,3,4,5,6.........n,并规定小球1的左边的球号为n,小 ...
- iOS-ARC-环境下如何查看引用计数的变化
iOS-ARC-环境下如何查看引用计数的变化 一,新建立一个工程,用于测试引用计数的变化. 二,找到如下路径Build Phases---->Compile Sources---->App ...
- css reset.css
/* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 License: none (public domain) */ html, ...
- C/C++数组名与指针区别深入探索(转载)
转载自: C/C++数组名与指针区别深入探索 引言 指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用.于是乎,很多程序设计者就被搞糊涂了.而许多的大学老师, ...
- 解决Sublime Text 3 中文乱码
1.按ctrl+~快捷键,调出一个小文本款,然后粘贴以下代码: import urllib.request, os, hashlib; h = '7183a2d3e96f11eeadd761d777e ...
- 关于SVN提交时报out-of-date错误的解决方法
提交项目文件时,报如下的信息:Item is out-of-datesvn: Commit failed (details follow):svn: Item '/xxx/xxx/xxx/xxx/xx ...