crm 系统项目(三) 自动分页

需求:

  1. 做一个自动分页, 每15条数据1页

  2. 让当前页数在中间显示

  3. 上一页, 下一页

注意情况:

  1.总页数 小于 规定显示的页数

  2. 左右两边极值情况

  3. 前后端传参,交互 

  

user_list.py

  1. {% extends 'layout.html' %}
  2.  
  3. {% block content %}
  4.  
  5. <table class="table table-bordered table-hover">
  6. <thead>
  7. <tr>
  8. <th>序号</th>
  9. <th>用户名</th>
  10. <th>密码</th>
  11.  
  12. </tr>
  13. </thead>
  14. <tbody>
  15. {% for user in all_user %}
  16. <tr>
  17. <td>{{ forloop.counter }}</td>
  18. <td>{{ user.name }}</td>
  19. <td>{{ user.pwd }}</td>
  20. </tr>
  21. {% endfor %}
  22.  
  23. </tbody>
  24. </table>
  25. <nav aria-label="Page navigation">
  26. <ul class="pagination">
  27. {{ page_html|safe }}
  28. </ul>
  29. </nav>
  30. {% endblock %}

urls.py

views.py

  1. userlist= [{'name':'傻傻的兆满{}号'.format(i),'pwd':'帅帅的灰灰{}号'.format(i)} for i in range(1,667)]
  2.  
  3. def user_list(request):
  4. try:
  5. page = int(request.GET.get('page', '')) #获取当前页码数
  6. if page <= 0:
  7. page = 1
  8. except Exception as e:
  9. page = 1
  10. print(page)
  11.  
  12. per_num = 15 # 每页显示的数据
  13. all_count = len(userlist) #总的数据量
  14. page_num, more = divmod(all_count, per_num) #商和余数
  15. if more:
  16. page_num += 1
  17. max_show = 11 #最多显示的分页数
  18. half_show = max_show // 2 #当前页码左面和右面各多少个,
  19.  
  20. if page_num < max_show:
  21. page_start = 1
  22. page_end = page_num
  23. else:
  24. if page <= half_show:
  25. page_start = 1
  26. page_end = max_show
  27. elif page + half_show > page_num:
  28. page_start = page_num - max_show + 1
  29. page_end = page_num
  30. else:
  31. page_start = page - half_show
  32. page_end = page + half_show
  33.  
  34. start = (page - 1) * per_num
  35. end = page * per_num
  36.  
  37. li_list = [] # 将分配好的页码,放入列表
  38. if page == 1:
  39. li_list.append('<li class="disabled" ><a> << </a></li>')
  40. else:
  41. li_list.append('<li ><a href="?page={}"> << </a></li>'.format(page - 1))
  42.  
  43. for i in range(page_start, page_end + 1):
  44. if page == i:
  45. li_list.append('<li class="active"><a href="?page={}">{}</a></li>'.format(i, i))
  46. else:
  47. li_list.append('<li><a href="?page={}">{}</a></li>'.format(i, i))
  48.  
  49. if page == page_num:
  50. li_list.append('<li class="disabled" ><a> >> </a></li>')
  51. else:
  52. li_list.append('<li ><a href="?page={}"> >> </a></li>'.format(page + 1))
  53.  
  54. page_html = ''.join(li_list) #列表变成字符串
  55. return render(request, 'user_list.html', {'all_user': userlist[start:end],
  56. 'page_num': range(page_start, page_end + 1),
  57. 'page_html': page_html},)

views.py

为了方便实用可以把整个分页封装起来, 

  在app下新建文件 paginationg.py

  封装分页功能

  1. # 封装分页
  2. class Pagination:
  3.  
  4. def __init__(self, page, all_count, per_num=15, max_show=11):
  5. try:
  6. page = int(page)
  7. if page <= 0:
  8. page = 1
  9. except Exception as e:
  10. page = 1
  11. self.page = page
  12. self.all_count = all_count
  13. self.per_num = per_num
  14. self.max_show = max_show
  15. # 总页码数
  16. self.page_num, more = divmod(all_count, per_num)
  17. if more:
  18. self.page_num += 1
  19. # 最多显示页码数
  20. half_show = max_show // 2
  21.  
  22. if self.page_num < max_show:
  23. # 总页码数不够 最大显示页码数
  24. self.page_start = 1
  25. self.page_end = self.page_num
  26. else:
  27. # 能显示超过最大显示页码数
  28. if page <= half_show:
  29. # 处理左边的极值
  30. self.page_start = 1
  31. self.page_end = max_show
  32. elif page + half_show > self.page_num:
  33. # 处理右边的极值
  34. self.page_start = self.page_num - max_show + 1
  35. self.page_end = self.page_num
  36. else:
  37. # 正常的情况
  38. self.page_start = page - half_show
  39. self.page_end = page + half_show
  40.  
  41. @property
  42. def start(self):
  43. return (self.page - 1) * self.per_num
  44.  
  45. @property
  46. def end(self):
  47. return self.page * self.per_num
  48.  
  49. @property
  50. def page_html(self):
  51. li_list = []
  52. if self.page == 1:
  53. li_list.append('<li class="disabled" ><a> << </a></li>')
  54. else:
  55. li_list.append('<li ><a href="?page={}"> << </a></li>'.format(self.page - 1))
  56.  
  57. for i in range(self.page_start, self.page_end + 1):
  58. if self.page == i:
  59. li_list.append('<li class="active"><a href="?page={}">{}</a></li>'.format(i, i))
  60. else:
  61. li_list.append('<li><a href="?page={}">{}</a></li>'.format(i, i))
  62.  
  63. if self.page == self.page_num:
  64. li_list.append('<li class="disabled" ><a> >> </a></li>')
  65. else:
  66. li_list.append('<li ><a href="?page={}"> >> </a></li>'.format(self.page + 1))
  67.  
  68. return ''.join(li_list)

paginationg.py

viewa.py下直接传参调用

  1. # 调用封装好的分页
  2. from app1.utils.paginationg import Pagination
  3. def user_list(request):
  4. pager = Pagination(request.GET.get('page',''), len(user_list), per_num=10, max_show=15)
  5. return render(request, 'user_list.html',
  6. {"all_user": userlist[pager.start:pager.end],
  7. 'page_html': pager.page_html
  8. }, )

crm 系统项目(三) 自动分页的更多相关文章

  1. crm 系统项目(三) 业务

    1. 项目背景 crm系统是某教育平台正在使用的项目,系统主要为 销售部.运营部.教质部门提供管理平台,随着公司规模的扩展,对公司员工的业务信息量化以及信息化建设越来越重要. crm系统为不同角色的用 ...

  2. crm 系统项目(二) admin 后台操作表格

    crm 系统项目(二) admin 后台操作表格 1. app下创建 templates  运行的时候 先找全局的templates——> 按照app的注册顺序找templates中的文件 2. ...

  3. crm 系统项目(一) 登录,注册,校验

    crm 系统项目(一) 登录,注册,校验 首先创建一个Django项目,关于配置信息不多说,前面有~ models.py文件下创建需要的表格信息,之后导入数据库 from django.db impo ...

  4. Java高级项目实战03:CRM系统数据库设计

    接上一篇:Java高级项目实战02:客户关系管理系统CRM系统模块分析与介绍 欢迎点击回顾,接下来我们说说 CRM系统数据库设计. 我们根据产品的原型搞以及UI组的设计稿, 接下来就要设计数据库, 一 ...

  5. Java高级项目实战02:客户关系管理系统CRM系统模块分析与介绍

    本文承接上一篇:Java高级项目实战之CRM系统01:CRM系统概念和分类.企业项目开发流程 先来CRM系统结构图: 每个模块作用介绍如下: 1.营销管理 营销机会管理:针对企业中客户的质询需求所建立 ...

  6. Java高级项目实战之CRM系统01:CRM系统概念和分类、企业项目开发流程

    1. CRM系统介绍 CRM系统即客户关系管理系统, 顾名思义就是管理公司与客户之间的关系. 是一种以"客户关系一对一理论"为基础,旨在改善企业与客户之间关系的新型管理机制.客户关 ...

  7. 三分钟了解B2B CRM系统的特点

    最近很多朋友想了解什么是B2B CRM系统,说到这里小Z先来给大家说说什么是B2B--B2B原本写作B to B,是Business-to-Business的缩写.正常来说就是企业与企业之间的生意往来 ...

  8. CRM系统新思维

    客户关系管理系统(CRM系统)是管理公司当前以及未来潜在客户的系统,其主要目的是通过优化客户关系实现公司销售业绩的长期增长,它是企业信息系统的核心之一.目前,移动互联网.大数据以及人工智能技术发展日新 ...

  9. Django CRM系统

    本节内容 业务痛点分析 项目需求讨论 使用场景分析 表结构设计 业务痛点分析 我2013年刚加入老男孩教育的时候,学校就一间教室,2个招生老师,招了学生后,招生老师就在自己的excel表里记录一下,每 ...

随机推荐

  1. Problem 13

    Problem 13 # Problem_13 """ Work out the first ten digits of the sum of the following ...

  2. Python 使用matplotlib模块模拟掷骰子

    掷骰子 骰子类 # die.py 骰子类模块 from random import randint class Die(): """骰子类""&quo ...

  3. Oracle学习总结(6)—— SQL注入技术

    不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一. SQL注入基 ...

  4. Elasticsearch Sliced Scroll分页检索案例分享

    面试:你懂什么是分布式系统吗?Redis分布式锁都不会?>>>   The best elasticsearch highlevel java rest api-----bboss ...

  5. Microsoft Dynamics CRM 2013 for Outlook 的硬件要求

    当仅联机或脱机模式下执行 Microsoft Dynamics CRM 2013 for Microsoft Office Outlook 时,下表列出了建议的最低硬件要求 watermark/2/t ...

  6. Web Service学习-CXF开发Web Service实例demo(一)

    Web Service是什么? Web Service不是框架.更甚至不是一种技术. 而是一种跨平台,跨语言的规范 Web Service解决什么问题: 为了解决不同平台,不同语言所编写的应用之间怎样 ...

  7. Codeforces Round #168 (Div. 2)---A. Lights Out

    Lights Out time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...

  8. 学习笔记一:关于directx sdk的安装于一些概念

    关于directx sdk开发环境的安装: 在百度搜索了directx sdk,进入了微软的官网,下载了DXSDK_Jun10.exe 百度网盘:http://pan.baidu.com/s/1o6r ...

  9. java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlException

    http://blog.csdn.net/you23hai45/article/details/70197502

  10. 从乐视和小米“最火电视”之战 看PR传播策略

        今年的双11够热闹.一方面,阿里.京东.国美.苏宁等电商巨头卯足了劲儿.试图在双11期间斗个你死我活,剑拔弩张的气势超过了以往不论什么一场双11:还有一方面.不少硬件厂商.家电企业也来凑双11 ...