1. 自定制的分页模块

    #!/usr/bin/env python3
    
    # V1.1 解决问题:
    # 1). p 参数 为 负数 与 p 参数查过总页数时报错的问题 # V1.2 解决的问题:
    # 1). 点击分页无法, get 其他参数的问题 class PageInfo(object):
    def __init__(self, current_page,per_page_num, all_count, base_url, get_url='' , page_range=9):
    """
    :param current_page: 当前页
    :param per_page_num: 每页显示的数据的条数
    :param all_count: 数据总条数
    :param base_url: 请求路径
    :param page_range: 显示页数, 标准网页页码数
    :param get_url : 用户除 p 参数之外提交的其他 get 参数, 用来拼接 url
    """
    try:
    current_page = int(current_page)
    except Exception as e:
    current_page = int(1)
    self.current_page = current_page
    self.per_page_num = per_page_num
    # 数据总条数 / 每页页数 如果 余数为 0 商就就是页数, 如果非零 页数就是 商 + 1
    quotient, remainder = divmod(all_count, per_page_num)
    if remainder != 0:
    self.all_page = quotient + 1 # all_page 总页数
    else:
    self.all_page = quotient
    self.base_url = base_url
    self.page_range = page_range
    self.get_url = get_url
    # 限制当前页的 范围
    if current_page < 1:
    self.current_page = 1
    elif current_page >self.all_page:
    self.current_page = self.all_page def start(self):
    return (self.current_page - 1) * self.per_page_num def end(self):
    return self.current_page * self.per_page_num def page_str(self):
    '''在 HTML 页面中显示页码信息'''
    page_list = [] # 首页
    home_page = '<li><a href="%s?p=1%s">首页</a></li>'%(self.base_url, self.get_url)
    page_list.append(home_page)
    # 限制 上一页
    if self.current_page <=1:
    previous = '<li><a href="">上一页</a></li>'
    else:
    previous = '<li><a href="%s?p=%s%s">上一页</a></li>' %(self.base_url,self.current_page-1, self.get_url)
    page_list.append(previous) # 整个 大 if 的作用 : 使用 start 与 end 类限制页码的个数
    if self.all_page <= self.page_range:
    # 此 if 的 作用 : 当页码总数 <= 最大页码显示的个数, 时触发
    start = 1
    end = self.all_page
    else:
    if self.current_page > int(self.page_range/2):
    if self.current_page >= self.all_page-int(self.page_range/2):
    # 此 if 循环 : 当前页码 >= 最大页码-标准页码/2 时触发, 不然就会出现没有数据的假页码,
    # 比如最大页码, 113 此时就会出现 114 , 114 就是假页码
    start = self.all_page - self.page_range + 1 # 如果不加 1 页码数, 开始的页码就会是 标准页码多一个
    # 这个时候开始生成为就应该是, 最大页码 - 标准页码 + 1 = 这时页面上的页码才是 标准页码个数
    end = self.all_page + 1 # 最后一只能是 最大页码
    else:
    start = self.current_page - int(self.page_range/2)
    end = self.current_page + int(self.page_range/2)+1
    else:
    # 处理 首页的几页页
    start = 1 # 说明页码的开头必须是 1
    end = self.page_range +1 # # for i in range(1, self.all_page+1):
    for i in range(start, end):
    # for 的作用: 循环生成页码, 而页码的个数是在 self.page_range 中指定
    # start 与 end 是为了限制页码的个数 # if 判断的 用途 , 为了实现, 只有在中间的 页码 才有 class="active" 属性
    if self.current_page == i:
    temp = '<li class="active"><a href="%s?p=%s%s">%s</a></li>'%(self.base_url, i, self.get_url, i)
    else:
    temp = '<li><a href="%s?p=%s%s">%s</a></li>' % (self.base_url, i, self.get_url, i)
    page_list.append(temp) # 限制 下一页
    if self.current_page >= self.all_page:
    next_page = '<li><a href="">下一页</a></li>'
    else:
    next_page = '<li><a href="%s?p=%s%s">下一页</a></li>' %(self.base_url,self.current_page+1, self.get_url)
    # 添加进列表
    page_list.append(next_page) # 尾页
    home_page = '<li><a href="%s?p=%s%s">尾页</a></li>'%(self.base_url, self.all_page, self.get_url)
    page_list.append(home_page)
    return ''.join(page_list)
  2. 调用的视图函数 (视图文件)
    def data_count(request):
    all_count = models.District.objects.count()
    from .page_info import PageInfo
    base_url = request.path_info
    page_info = PageInfo(request.GET.get('p'), 10, all_count, base_url)
    user_list = models.District.objects.filter(id__range=[page_info.start(),page_info.end()])
    return render(request, 'users2.html',{'user_list':user_list})
  3. template 文件
    <body>
    <div style="width: 800px; margin: 0 auto">
    <h1>用户列表</h1>
    <table class="table table-hover table-bordered">
    <tr>
    <th>ID</th>
    <th>用户名</th>
    <th>密码</th>
    <th>邮箱</th>
    </tr>
    {% for i in user_list %}
    <tr>
    <td>{{ i.id }}</td>
    <td>{{ i.name }}</td>
    <td>{{ i.password }}</td>
    <td>{{ i.email }}</td>
    </tr>
    {% endfor %}
    </table>
    <div>
    <nav aria-label="...">
    <ul class="pagination">
    {# 分页页码 #}
    {{ page_info.page_str|safe }}
    </ul>
    </nav>
    </div>
    </div>
    </body>

python django 之 django自定制分页的更多相关文章

  1. Python开发【Django】:分页、Cookie和Session

    分页 1.简单分页 涉及xss攻击,需要用到mark_safe方法,使用此方法字符串传输到后端后,已html形式显示,而非字符串 HTML文件: <!DOCTYPE html> <h ...

  2. python web框架 Django进阶

    django 进阶 基础中,一些操作都是手动创建连接的非主流操作,这样显得太low,当然也是为了熟悉这个框架! 实际中,django自带连接数据库和创建app的机制,同时还有更完善的路由系统机制.既然 ...

  3. python框架之django

    python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django temple django models ...

  4. 第六篇:web之python框架之django

    python框架之django   python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django te ...

  5. Django框架下的增强分页组件

    本文通过文章同步功能推送至博客园,显示排版可能会有所错误,请见谅! 描述:Django框架内置了分页功能,但其只能满足简单需求,难以实现复杂功能. 实现代码: #!/usr/bin/env pytho ...

  6. python面试题-django相关

    1.中间件 中间件一般做认证或批量请求处理,django中的中间件,其实是一个类,在请求和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法, 如请求过来 执行process_re ...

  7. 6月15日 python学习总结 Django模板语言相关内容

    Django模板语言相关内容   Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...

  8. Python攻关之Django(一)

    课程简介: Django流程介绍 Django url Django view Django models Django template Django form Django admin (后台数据 ...

  9. Python Virtualenv运行Django环境配置

    系统: RHEL6.5 版本说明: Python-3.5.0 Django-1.10.4 virtualenv:为每个项目建立不同的/独立的Python环境,你将为每个项目安装所有需要的软件包到它们各 ...

  10. 【Python实战】Django建站笔记

    前一段时间,用Django搭建一个报表分析的网站:借此正好整理一下笔记. 1. 安装 python有包管理工具pip,直接cd Python27/Scripts,输入 pip install djan ...

随机推荐

  1. 900B. Position in Fraction#分数位置(模拟)

    题目出处:http://codeforces.com/problemset/problem/900/B 题目大意:找到一个数字在小数部分中第一次出现的位置 #include<iostream&g ...

  2. Java复习(四)类的重用

    4.1类的继承 Java只支持类的单继承,每一个子类只能有一个直接父类. #继承的语法 class childClass extends parentClass { //类体 } 子类不能直接访问从父 ...

  3. 序列化模块ModelSerializer

    课程准备 配置:settings.py INSTALLED_APPS = [ # ... 'rest_framework', ] DATABASES = { 'default': { 'ENGINE' ...

  4. 分层结构与MVC模式

    一.分层结构1.所谓分层结构.把不同的功能代码封装成类,把相同功能的类封装在一个个的包中,也叫层.功能归类如下:实体类:封装数据,是数据的载体,在层与层之间进行传递,数据也就传递了.比如说要传递学生信 ...

  5. day36-进程操作实例,守护进程,方法,属性

    #1.server端跟多个client端聊天: #异步操作,主进程负责接收client的连接,子进程负责跟client聊天. #每接收一个连接,就创建一个子进程,子进程之间的数据是隔离的,互不影响,所 ...

  6. 算法笔记4.3递归 问题 A: 吃糖果

    问题 A: 吃糖果 题目描述 名名的妈妈从外地出差回来,带了一盒好吃又精美的巧克力给名名(盒内共有 N 块巧克力,20 > N >0). 妈妈告诉名名每天可以吃一块或者两块巧克力. 假设名 ...

  7. 九成AI企业亏损,人工智能商业落地为何这么难?

    自1956年"人工智能"一词诞生于"达特茅斯会议"后,前者就始终在不断向前推进.虽然中间经历了不少低谷和寒潮,但总算挺了过来.60多年后,人工智能在当下呈现突飞 ...

  8. vue点击复制文本粘贴

    <template>  <ul>      <li> <input type="text" class="inpNone&quo ...

  9. 高可用(keepalived+lvs)

    博主本人平和谦逊,热爱学习,读者阅读过程中发现错误的地方,请帮忙指出,感激不尽 架构图: 本次实验严格按照下图完成 1.系统环境设置 1.1SELinux设置 vim /etc/selinux/con ...

  10. mysql中造3千条数据(3种方法)

    方法一:存储过程 1.存储过程如下: delimiter $$ DROP PROCEDURE IF EXISTS data CREATE PROCEDURE data(in i int) BEGIN ...