博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第三百一十四节,Django框架,自定义分页
阅读量:5985 次
发布时间:2019-06-20

本文共 5356 字,大约阅读时间需要 17 分钟。

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

 

自定义分页模块

#!/usr/bin/env python#coding:utf-8from 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 = '
  • 首页
  • ' % (self.url) ye_ma_lie_biao.append(sh_temp) #上一页 if self.dang_qian_ye <= 1: shye = '
  • 上一页
  • ' ye_ma_lie_biao.append(shye) else: shye = '
  • 上一页
  • ' %(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 = '
  • %s
  • ' % (self.url,i, i) # 格式化当前页码设置样式 else: temp = '
  • %s
  • ' % (self.url,i, i) # 格式化当前页码 ye_ma_lie_biao.append(temp) # 将格式化的页码数据追加到列表 #下一页 if self.dang_qian_ye >= self.zong_ye_ma: xye = '
  • 下一页
  • ' ye_ma_lie_biao.append(xye) else: xye = '
  • 下一页
  • ' %(self.url,self.dang_qian_ye+1) ye_ma_lie_biao.append(xye) #尾页 wei_temp = '
  • 尾页
  • ' % (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,redirectfrom 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

        
    Title
      {
      % for i in ff %}
    • {
      { i.shf }}
    • {
      % endfor %}
      {
      { fy }}

     

    转载地址:http://seulx.baihongyu.com/

    你可能感兴趣的文章
    UML架构(转载)
    查看>>
    解决bash: mysql: command not found 的方法
    查看>>
    EF for Mysql
    查看>>
    java第四章:数组
    查看>>
    WEB服务器安装oracle jdbc
    查看>>
    DevExpress学习之ASPxGridView后台增加列
    查看>>
    例题6-20 UVa1599 Ideal Path(两次BFS)
    查看>>
    SOCKIT 在make时出现(target pattern contains no % stop)???
    查看>>
    java_instanceof运算符的总结
    查看>>
    pip install GitHub package
    查看>>
    mybatis中传递参数时,会加上单引号
    查看>>
    关于 using namespace * (转载)
    查看>>
    布局设置加版心?
    查看>>
    Java常用排序算法 / 程序员必须掌握的8大排序算法
    查看>>
    网络编程中常需考虑的情况
    查看>>
    POJ 2239:Selecting Courses 选课
    查看>>
    android 转化json日期
    查看>>
    jqgrid 谈谈给表格设置列头事件、行事件、内容事件
    查看>>
    JSP(JavaScript的内部对象)
    查看>>
    如何比较自定义类型相等
    查看>>