您的位置:首页 > 编程语言 > Go语言

第三百一十四节,Django框架,自定义分页

2017-07-19 13:54 726 查看
第三百一十四节,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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: