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

自定义分页模块

  1. #!/usr/bin/env python
  2. #coding:utf-8
  3. from django.utils.safestring import mark_safe
  4.  
  5. #封装分页类模块
  6. class fen_ye_lei:
  7. def __init__(self,dang_qian_ye,shu_ju,tiao_shu,ye_ma_shu,qian_hou_ye,url):
  8. """
  9. 一个参数接收当前页
  10. 第一个参数,接收分页数据列表
  11. 第二个参数,接收每页显示多少条数据
  12. 第三个参数,每页显示多少个页码
  13. 第四个参数,显示当前页码前几个和后几个页码,需要结合每页显示多少个页码计算
  14. 第五个参数,分页连接url后缀,也就是路由映射的后缀
  15. """
  16. try: #尝试执行
  17. dang_qian_ye = int(dang_qian_ye) #将当前页换成数字类型
  18. except: #如果出错
  19. dang_qian_ye = 1 #当前页等于1
  20. if dang_qian_ye < 1: #判断当前页如果小于1
  21. dang_qian_ye = 1 #当前页等于1
  22.  
  23. self.dang_qian_ye = dang_qian_ye #当前页
  24. self.shu_ju = shu_ju #接收分页数据列表
  25. self.tiao_shu = tiao_shu #接收每页显示多少条数据
  26. self.ye_ma_shu = ye_ma_shu #每页显示多少个页码
  27. self.qian_hou_ye = qian_hou_ye #显示当前页码前几个和后几个页码,需要结合每页显示多少个页码计算
  28. self.url = url #分页连接url后缀,也就是路由映射的后缀
  29.  
  30. # 计算总页码
  31. zong_ye_ma, c = divmod(len(self.shu_ju), self.tiao_shu) #数据总量除以显示条数,取余,两个变量接收,第一个变量得到相除后的整数,后一个变量得到相除后的余数(小数)
  32. if c > 0: #判断余数如果大于0,
  33. zong_ye_ma += 1 #页面数等于整数加1,等于分页总量
  34. self.zong_ye_ma = zong_ye_ma #接收总页码
  35.  
  36. def shu_ju_fan_wei(self):
  37. """
  38. shu_ju_fan_wei()方法,返回每页获取范围数据
  39. """
  40. #换算每页获取范围数据
  41. qi_shi = (self.dang_qian_ye - 1) * self.tiao_shu #当前页码获取数据起始位置
  42. jie_shu = self.dang_qian_ye * self.tiao_shu #当前页码获取数据结束位置
  43. xian_shi = self.shu_ju[qi_shi:jie_shu] #通过起始和结束位置以下标方式获取指定范围的列表数据,xian_shi传到html模板显示数据
  44. return xian_shi
  45.  
  46. def xian_shi_ye_ma(self):
  47. """
  48. xian_shi_ye_ma()方法,返回页码数据
  49. """
  50. # 计算每页显示多少个页码
  51. # 假设每页显示11个页码,当前页的前5个和后5个
  52. # 所以需要动态调整循环里的值
  53. if self.zong_ye_ma < self.ye_ma_shu: # 判断总页码小于每页显示多少个页码
  54. s = 1 # 起始页码为1
  55. t = self.zong_ye_ma # 结束页码为总页码
  56. else:
  57. if self.dang_qian_ye <= self.qian_hou_ye + 1: # 判断当前页码小于前后页码数
  58. s = 1 # 起始页码为1
  59. t = self.ye_ma_shu # 结束页码为每页显示多少个页码
  60. else:
  61. if (self.dang_qian_ye + self.qian_hou_ye) > self.zong_ye_ma: # 判断当前页加前后页码数如果大于总页码数
  62. s = self.zong_ye_ma - (self.ye_ma_shu - 1) # 起始页为总页数减以(每页显示多少个页码减一)
  63. t = self.zong_ye_ma # 结束页为总页码数
  64. else:
  65. s = self.dang_qian_ye - self.qian_hou_ye # 起始页为当前页减以前后页码数
  66. t = self.dang_qian_ye + self.qian_hou_ye # 结束页为当前页加前后页码数
  67.  
  68. ye_ma_lie_biao = [] # 创建列表接收页码数据
  69.  
  70. #首页
  71. sh_temp = '<li><a href="%s1">首页</a></li>' % (self.url)
  72. ye_ma_lie_biao.append(sh_temp)
  73.  
  74. #上一页
  75. if self.dang_qian_ye <= 1:
  76. shye = '<li><a href="javascript:void(0);">上一页</a></li>'
  77. ye_ma_lie_biao.append(shye)
  78. else:
  79. shye = '<li><a href="%s%s">上一页</a></li>' %(self.url,self.dang_qian_ye-1)
  80. ye_ma_lie_biao.append(shye)
  81.  
  82. for i in range(s, t + 1): # 根据分页总量循环次数
  83. if i == self.dang_qian_ye: # 判断循环到的页码等于当前页面
  84. temp = '<li class="yem"><a href="%s%s">%s</a></li>' % (self.url,i, i) # 格式化当前页码设置样式
  85. else:
  86. temp = '<li><a href="%s%s">%s</a></li>' % (self.url,i, i) # 格式化当前页码
  87. ye_ma_lie_biao.append(temp) # 将格式化的页码数据追加到列表
  88.  
  89. #下一页
  90. if self.dang_qian_ye >= self.zong_ye_ma:
  91. xye = '<li><a href="javascript:void(0);">下一页</a></li>'
  92. ye_ma_lie_biao.append(xye)
  93. else:
  94. xye = '<li><a href="%s%s">下一页</a></li>' %(self.url,self.dang_qian_ye+1)
  95. ye_ma_lie_biao.append(xye)
  96.  
  97. #尾页
  98. wei_temp = '<li><a href="%s%s">尾页</a></li>' % (self.url,self.zong_ye_ma)
  99. ye_ma_lie_biao.append(wei_temp)
  100.  
  101. xian_shi = "\n".join(ye_ma_lie_biao) # 将页面数据,连接成一个字符串,传输到HTML模板
  102. return mark_safe(xian_shi)

逻辑处理

  1. from django.shortcuts import render,redirect
  2.  
  3. from app1.chajian.fen_ye import fen_ye_lei #导入分页模块
  4. from app1.models import * #导入数据库模块
  5. #逻辑处理模块
  6. def special(request,page):
  7. shuju = shengf.objects.all().values('shf') #获取数据库数据
  8. shuju2 = list(shuju) #将数据转换成列表
  9. fen_ye = fen_ye_lei(page,shuju2,1,3,1,'/bugarticles/') #创建分页对象
  10. fy = fen_ye.xian_shi_ye_ma() #接收分页html
  11. ff = fen_ye.shu_ju_fan_wei #接收分页范围数据
  12. if fen_ye.dang_qian_ye > fen_ye.zong_ye_ma: # 判断分页对象里的当前页码如果大于总页码
  13. zfchdqy = str(fen_ye.zong_ye_ma) # 将总页码转换成字符串
  14. return redirect('/bugarticles/' + zfchdqy) # 跳转到总页码
  15. else:
  16. return render(request, 'app1/index.html',locals())

html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <link rel="stylesheet" type="text/css" href="/static/css/tou.css">
  7. </head>
  8. <body>
  9. <div>
  10. <ul class="shu">
  11. {% for i in ff %}
  12. <li>{{ i.shf }}</li>
  13. {% endfor %}
  14. </ul>
  15. </div>
  16. <ul class="fy">
  17. {{ fy }}
  18. </ul>
  19. </body>
  20. </html>

第三百一十四节,Django框架,自定义分页的更多相关文章

  1. 第三百一十八节,Django框架,信号

    第三百一十八节,Django框架,信号 Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. 也就是当程序有指定动作时, ...

  2. 第三百一十三节,Django框架,Session

    第三百一十三节,Django框架,Session Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: 1.数据库(默认)2.缓存3.文件4.缓存+数据库5.加密c ...

  3. 第三百一十九节,Django框架,文件上传

    第三百一十九节,Django框架,文件上传 1.自定义上传[推荐] 请求对象.FILES.get()获取上传文件的对象上传对象.name获取上传文件名称上传对象.chunks()获取上传数据包,字节码 ...

  4. 第三百一十六节,Django框架,中间件

    第三百一十六节,Django框架,中间件 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间 ...

  5. 第三百一十五节,Django框架,CSRF跨站请求伪造

    第三百一十五节,Django框架,CSRF跨站请求伪造  全局CSRF 如果要启用防止CSRF跨站请求伪造,就需要在中间件开启CSRF #中间件 MIDDLEWARE = [ 'django.midd ...

  6. 第三百四十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—craw母版l创建自动爬虫文件—以及 scrapy item loader机制

    第三百四十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—craw母版l创建自动爬虫文件—以及 scrapy item loader机制 用命令创建自动爬虫文件 创建爬虫文件是根据scrap ...

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

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

  8. 第四百一十四节,python常用算法学习

    本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机 ...

  9. 第二百一十四节,jQuery EasyUI,Calendar(日历)组件

    jQuery EasyUI,Calendar(日历)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 Canlendar(日历)组件的使用方法 ...

随机推荐

  1. PowerDesigner列名作为注释

    Tools -> Execute Commands -> Edit/Run Script 执行以下脚本: Option Explicit ValidationMode = True Int ...

  2. spring 中 AOP 功能

    1 PointCut 由 ClassFilter 和 MethodMatcher 构成,通过 ClassFilter 定位到类上,通过 MethodMatcher 定位到方法. 2 Spring 支持 ...

  3. 权限管理系统(一):权限系统与RBAC模型概述

    RBAC模型概述 RBAC即角色访问控制(Role Based Access Control) RBAC认为权限授权实际上是Who.What.How的问题.在RBAC模型中,who.what.how构 ...

  4. [Jobdu] 题目1500:出操队形

    题目描述: 在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往楼下跑了,然后身高矮的排在队伍的前面,身高较高的就要排在队尾.突然,有一天出操负责人想了一个 ...

  5. C#通用JSON帮助类

    using System; using System.Data; using System.Text; using System.Collections.Generic; using System.R ...

  6. Cocos2d-x CCScale9Sprite 用法

    1.创建方式有三种: (1).直接创建 auto blocks = Scale9Sprite::create("blocks9.png", Rect(0, 0, 96, 96), ...

  7. (基于Jenkins + SVN + Ant + Weblogic Server的)应用程序自动(/一键)部署的设想

    一直想实现自动部署,这里说的自动部署,是指点击一个按钮(或定时执行),让计算机将最新的应用程序发布到相应的环境(UAT或PRD)中. 自动部署的意义 自动部署能省去繁琐的人工发布步骤:如配置得当,发布 ...

  8. spark内存概述

    转自:https://github.com/jacksu/utils4s/blob/master/spark-knowledge/md/spark%E5%86%85%E5%AD%98%E6%A6%82 ...

  9. ph 的使用步骤

    Arcanist用户指南Windows Updated 44 Day(s) Ago所有用户 https://phabricator.webfuns.net/book/phabricator/artic ...

  10. spring使用ApplicationContext读取资源文件

    @Autowired private ApplicationContext applicationContext; Resource resource = applicationContext.get ...