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表里记录一下,每 ...
随机推荐
- ROPI下载安装
ROPI下载安装 官方地址 参考文献 安装过程 wget http://num.math.uni-goettingen.de/~m.goerigk/ropi/0.1.0/ropi-0.1.0.tar. ...
- FreeMarker 语法 include 引用模板
一.java 代码 @Test public void testFreeMarker() throws Exception { //1.创建一个模板文件 //2.创建一个Configuration对象 ...
- RobotFrameWork+APPIUM实现对安卓APK的自动化测试----第七篇【元素定位介绍】
http://blog.csdn.net/deadgrape/article/details/50628113 我想大家在玩自动化的时候最关心的一定是如何定位元素,因为元素定位不到后面的什么方法都实现 ...
- Ajax-URL 防止数据缓存,添加时间戳
url:CONTEXTPATH + "/dataService/getSourceStatics?type=0&t="+new Date().getTime(),
- [Beginning SharePoint Designer 2010]Chapter5 主题和样式
本章概要: 1.什么是CSS 2.样式表的组成 3.如何管理CSS适应SPD的工具和特性 4.被SPS使用的关键的CSS类别 5.使用SPD应用样式到你的站点上
- POJ 1320
作弊了--!该题可以通过因式分解得到一个佩尔方程....要不是学着这章,估计想不到.. 得到x1,y1后,就直接代入递推式递推了 x[n]=x[n-1]*x[1]+d*y[n-1]*y[1] y[n] ...
- CountDownLatch使用方法
CountDownLatch是一个同步辅助类,在完毕一组正在其它线程中运行的操作之前.它同意一个或多个线程一直等待. 如果我们周末要去旅游.出游前须要提前订好机票.巴士和酒店,都订好后就能够出发了.这 ...
- socket编程之二:两种链接类型tcp和udp
前面一篇文章说到了一些计算机网络的基础知识.引入了socket.从这节開始,就进入正题了. 一 概述 TCP:Transimission Control Protocol传输控制协议. UPD:Use ...
- python爬虫系列:Scrapy安装与使用
这篇博文主要写Scrapy框架的安装与使用 Scrapy框架安装 命令行进入C:\Anaconda2\Scripts目录,运行:conda install Scrapy 创建Scrapy项目 1)进入 ...
- 院校-美国:美国国立卫生研究院(NIH)
ylbtech-院校-美国:美国国立卫生研究院(NIH) 美国国立卫生研究院(简称NIH)位于美国马里兰州贝塞斯达(Bethesda),是美国最高水平的医学与行为学研究机构,初创于1887年,任务是探 ...