crm 系统项目(三) 自动分页
crm 系统项目(三) 自动分页
需求:
1. 做一个自动分页, 每15条数据1页
2. 让当前页数在中间显示
3. 上一页, 下一页
注意情况:
1.总页数 小于 规定显示的页数
2. 左右两边极值情况
3. 前后端传参,交互
user_list.py
- {% extends 'layout.html' %}
- {% block content %}
- <table class="table table-bordered table-hover">
- <thead>
- <tr>
- <th>序号</th>
- <th>用户名</th>
- <th>密码</th>
- </tr>
- </thead>
- <tbody>
- {% for user in all_user %}
- <tr>
- <td>{{ forloop.counter }}</td>
- <td>{{ user.name }}</td>
- <td>{{ user.pwd }}</td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
- <nav aria-label="Page navigation">
- <ul class="pagination">
- {{ page_html|safe }}
- </ul>
- </nav>
- {% endblock %}
urls.py
views.py
- userlist= [{'name':'傻傻的兆满{}号'.format(i),'pwd':'帅帅的灰灰{}号'.format(i)} for i in range(1,667)]
- def user_list(request):
- try:
- page = int(request.GET.get('page', '')) #获取当前页码数
- if page <= 0:
- page = 1
- except Exception as e:
- page = 1
- print(page)
- per_num = 15 # 每页显示的数据
- all_count = len(userlist) #总的数据量
- page_num, more = divmod(all_count, per_num) #商和余数
- if more:
- page_num += 1
- max_show = 11 #最多显示的分页数
- half_show = max_show // 2 #当前页码左面和右面各多少个,
- if page_num < max_show:
- page_start = 1
- page_end = page_num
- else:
- if page <= half_show:
- page_start = 1
- page_end = max_show
- elif page + half_show > page_num:
- page_start = page_num - max_show + 1
- page_end = page_num
- else:
- page_start = page - half_show
- page_end = page + half_show
- start = (page - 1) * per_num
- end = page * per_num
- li_list = [] # 将分配好的页码,放入列表
- if page == 1:
- li_list.append('<li class="disabled" ><a> << </a></li>')
- else:
- li_list.append('<li ><a href="?page={}"> << </a></li>'.format(page - 1))
- for i in range(page_start, page_end + 1):
- if page == i:
- li_list.append('<li class="active"><a href="?page={}">{}</a></li>'.format(i, i))
- else:
- li_list.append('<li><a href="?page={}">{}</a></li>'.format(i, i))
- if page == page_num:
- li_list.append('<li class="disabled" ><a> >> </a></li>')
- else:
- li_list.append('<li ><a href="?page={}"> >> </a></li>'.format(page + 1))
- page_html = ''.join(li_list) #列表变成字符串
- return render(request, 'user_list.html', {'all_user': userlist[start:end],
- 'page_num': range(page_start, page_end + 1),
- 'page_html': page_html},)
views.py
为了方便实用可以把整个分页封装起来,
在app下新建文件 paginationg.py
封装分页功能
- # 封装分页
- class Pagination:
- def __init__(self, page, all_count, per_num=15, max_show=11):
- try:
- page = int(page)
- if page <= 0:
- page = 1
- except Exception as e:
- page = 1
- self.page = page
- self.all_count = all_count
- self.per_num = per_num
- self.max_show = max_show
- # 总页码数
- self.page_num, more = divmod(all_count, per_num)
- if more:
- self.page_num += 1
- # 最多显示页码数
- half_show = max_show // 2
- if self.page_num < max_show:
- # 总页码数不够 最大显示页码数
- self.page_start = 1
- self.page_end = self.page_num
- else:
- # 能显示超过最大显示页码数
- if page <= half_show:
- # 处理左边的极值
- self.page_start = 1
- self.page_end = max_show
- elif page + half_show > self.page_num:
- # 处理右边的极值
- self.page_start = self.page_num - max_show + 1
- self.page_end = self.page_num
- else:
- # 正常的情况
- self.page_start = page - half_show
- self.page_end = page + half_show
- @property
- def start(self):
- return (self.page - 1) * self.per_num
- @property
- def end(self):
- return self.page * self.per_num
- @property
- def page_html(self):
- li_list = []
- if self.page == 1:
- li_list.append('<li class="disabled" ><a> << </a></li>')
- else:
- li_list.append('<li ><a href="?page={}"> << </a></li>'.format(self.page - 1))
- for i in range(self.page_start, self.page_end + 1):
- if self.page == i:
- li_list.append('<li class="active"><a href="?page={}">{}</a></li>'.format(i, i))
- else:
- li_list.append('<li><a href="?page={}">{}</a></li>'.format(i, i))
- if self.page == self.page_num:
- li_list.append('<li class="disabled" ><a> >> </a></li>')
- else:
- li_list.append('<li ><a href="?page={}"> >> </a></li>'.format(self.page + 1))
- return ''.join(li_list)
paginationg.py
viewa.py下直接传参调用
- # 调用封装好的分页
- from app1.utils.paginationg import Pagination
- def user_list(request):
- pager = Pagination(request.GET.get('page',''), len(user_list), per_num=10, max_show=15)
- return render(request, 'user_list.html',
- {"all_user": userlist[pager.start:pager.end],
- 'page_html': pager.page_html
- }, )
crm 系统项目(三) 自动分页的更多相关文章
- crm 系统项目(三) 业务
1. 项目背景 crm系统是某教育平台正在使用的项目,系统主要为 销售部.运营部.教质部门提供管理平台,随着公司规模的扩展,对公司员工的业务信息量化以及信息化建设越来越重要. crm系统为不同角色的用 ...
- crm 系统项目(二) admin 后台操作表格
crm 系统项目(二) admin 后台操作表格 1. app下创建 templates 运行的时候 先找全局的templates——> 按照app的注册顺序找templates中的文件 2. ...
- crm 系统项目(一) 登录,注册,校验
crm 系统项目(一) 登录,注册,校验 首先创建一个Django项目,关于配置信息不多说,前面有~ models.py文件下创建需要的表格信息,之后导入数据库 from django.db impo ...
- Java高级项目实战03:CRM系统数据库设计
接上一篇:Java高级项目实战02:客户关系管理系统CRM系统模块分析与介绍 欢迎点击回顾,接下来我们说说 CRM系统数据库设计. 我们根据产品的原型搞以及UI组的设计稿, 接下来就要设计数据库, 一 ...
- Java高级项目实战02:客户关系管理系统CRM系统模块分析与介绍
本文承接上一篇:Java高级项目实战之CRM系统01:CRM系统概念和分类.企业项目开发流程 先来CRM系统结构图: 每个模块作用介绍如下: 1.营销管理 营销机会管理:针对企业中客户的质询需求所建立 ...
- Java高级项目实战之CRM系统01:CRM系统概念和分类、企业项目开发流程
1. CRM系统介绍 CRM系统即客户关系管理系统, 顾名思义就是管理公司与客户之间的关系. 是一种以"客户关系一对一理论"为基础,旨在改善企业与客户之间关系的新型管理机制.客户关 ...
- 三分钟了解B2B CRM系统的特点
最近很多朋友想了解什么是B2B CRM系统,说到这里小Z先来给大家说说什么是B2B--B2B原本写作B to B,是Business-to-Business的缩写.正常来说就是企业与企业之间的生意往来 ...
- CRM系统新思维
客户关系管理系统(CRM系统)是管理公司当前以及未来潜在客户的系统,其主要目的是通过优化客户关系实现公司销售业绩的长期增长,它是企业信息系统的核心之一.目前,移动互联网.大数据以及人工智能技术发展日新 ...
- Django CRM系统
本节内容 业务痛点分析 项目需求讨论 使用场景分析 表结构设计 业务痛点分析 我2013年刚加入老男孩教育的时候,学校就一间教室,2个招生老师,招了学生后,招生老师就在自己的excel表里记录一下,每 ...
随机推荐
- Problem 13
Problem 13 # Problem_13 """ Work out the first ten digits of the sum of the following ...
- Python 使用matplotlib模块模拟掷骰子
掷骰子 骰子类 # die.py 骰子类模块 from random import randint class Die(): """骰子类""&quo ...
- Oracle学习总结(6)—— SQL注入技术
不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一. SQL注入基 ...
- Elasticsearch Sliced Scroll分页检索案例分享
面试:你懂什么是分布式系统吗?Redis分布式锁都不会?>>> The best elasticsearch highlevel java rest api-----bboss ...
- Microsoft Dynamics CRM 2013 for Outlook 的硬件要求
当仅联机或脱机模式下执行 Microsoft Dynamics CRM 2013 for Microsoft Office Outlook 时,下表列出了建议的最低硬件要求 watermark/2/t ...
- Web Service学习-CXF开发Web Service实例demo(一)
Web Service是什么? Web Service不是框架.更甚至不是一种技术. 而是一种跨平台,跨语言的规范 Web Service解决什么问题: 为了解决不同平台,不同语言所编写的应用之间怎样 ...
- 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 ...
- 学习笔记一:关于directx sdk的安装于一些概念
关于directx sdk开发环境的安装: 在百度搜索了directx sdk,进入了微软的官网,下载了DXSDK_Jun10.exe 百度网盘:http://pan.baidu.com/s/1o6r ...
- java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlException
http://blog.csdn.net/you23hai45/article/details/70197502
- 从乐视和小米“最火电视”之战 看PR传播策略
今年的双11够热闹.一方面,阿里.京东.国美.苏宁等电商巨头卯足了劲儿.试图在双11期间斗个你死我活,剑拔弩张的气势超过了以往不论什么一场双11:还有一方面.不少硬件厂商.家电企业也来凑双11 ...