自定义分页模块

#!/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框架,自定义分页的更多相关文章

  1. Django框架---- 自定义分页组件

    分页的实现与使用 class Pagination(object): """ 自定义分页 """ def __init__(self,cur ...

  2. django上课笔记2-视图CBV-ORM补充-Django的自带分页-Django的自定义分页

    一.视图CBV 1.urls url(r'^login.html$', views.Login.as_view()), 2.views from django.views import View cl ...

  3. Django学习笔记第十二篇--关于自定义数据库字段数据类型

    一.需求背景: django的models模块提供了很多数据字段的数据类型field,但是总有写奇葩需求不能依靠默认字段满足,所以需要自定义数据数据库数据字段类型.所有的自定义field应该在app路 ...

  4. 二 Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器

    Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器 这一节主讲url控制器 一.urls.py模块 这个模块是配置路由映射的模块,当用户访问一个 ...

  5. 玩转Django2.0---Django笔记建站基础十二(Django项目上线部署)

    第十二章 Django项目上线部署 目前部署Django项目有两种主流方案:Nginx+uWsGI+Django或者Apache+uWSGI+Django.Nginx作为服务器最前端,负责接收浏览器的 ...

  6. Python之路【第十九篇】自定义分页实现(模块化)

    自定义分页 1.目的&环境准备 目的把分页写成一个模块的方式然后在需要分页的地方直接调用模块就行了. 环境准备Django中生成一个APP并且注册,配置URL&Views 配置URL ...

  7. J2EE进阶(十二)SSH框架整合常见问题汇总(三)

    在挂失用户时,发现userid值为空,但是在前台输入处理账号22时,通过后台输出可以看出,后台根据前端输入在数据库中查询到结果对象并输出该对象的userid,而且Guashi对象也获取到了其值. 解决 ...

  8. Python学习(三十)—— Django框架简介

    转载自:http://www.cnblogs.com/liwenzhou/p/8296964.html Django框架简介 一.MVC框架和MTV框架(了解即可) MVC,全名是Model View ...

  9. Django学习---自定义分页

    自定义分页 简单例子: urls.py: from django.contrib import admin from django.urls import path from django.conf. ...

随机推荐

  1. C和C++格式转换

    一.引用参数和指针的转换 标准C不支持引用参数,对此需进行转换.下面以bo1-1.cpp和bo1-1.c中DestroyTriplet()函数为例来说明这种转换. bo1-1.cpp中含有引用参数的函 ...

  2. named主从环境部署

    named主 1. bind服务安装配置 yum -y install bind*.x86_64 配置文件: /etc/named.conf /etc/named.rfc1912.zones /etc ...

  3. jqury 如何获取 kindeditor 中textarea 的值

    获取文本内容,可是的创建时怎么也不能获取,利用FF的firebug查看到自己所写的内容在一个iframe中,于是想从iframe中获取文本,想要用 $(“ifame”).html();获取内容,可是依 ...

  4. 验证-- email类型输入框(电子邮件地址)--multiple

    如果需要一个用来填写电子邮件地址的输入框,可以使用email类型.这样浏览器可以帮我们验证格式是否正确,而不需要自己写验证规则.原文:HTML5新控件 - email类型输入框(电子邮件地址) 1,只 ...

  5. PDP开发环境搭建

    1. 安装git 2.创建SSH-rsa钥匙 3. 写入 gitlab 4. 克隆分支 git clone  -b  dev_pdp_minz_ep_metting   git@gitlab.csvw ...

  6. 解决不同浏览器创建不同 XMLHTTP 对象的问题

    function GetXmlHttpObject() { var xmlHttp=null; try { // Firefox, Opera 8.0+, Safari xmlHttp=new XML ...

  7. AFN多文件进度下载

    AFN参考资料 http://www.jianshu.com/p/c36159094e24 http://blog.cnbang.net/tech/2320/http://blog.cnbang.ne ...

  8. Python菜鸟之路:Python基础——函数

    一.函数 1. 简介 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率. 2. 组成 函数代码块以 def 关键词开头,后接函数名和圆括号( ...

  9. ASP连接数据库SQLServer

    Set conn=Server.CreateObject("adodb.connection")Set conn1=Server.CreateObject("adodb. ...

  10. 我的Android进阶之旅------>Android字符串资源中的单引号问题error: Apostrophe not preceded by 的解决办法

    刚刚在string字符串资源文件中,写了一个单引号,报错了,错误代码如下 error: Apostrophe not preceded by \ (in OuyangPeng's blog ) 资源文 ...