1. 客户信息展示
  1. 母版和继承
    {% extends 'layout'%}
    {% load static%}
    {% static '文件路径' %}
    block css js content

  2. 内容显示
    普通字段 {{ customer.qq }}
    choices {{ customer.get_class_type_display }}
    多对多 定义方法 返回字符串
    显示状态 定义方法 返回HTML代码段 mark_safe

2. 分页
from django.utils.safestring import mark_safe # 字符串不进行转义
from django.utils.html import format_html

前端分页和后端分页

前端分页一般用于数据量较小的情况,一次请求把数据全部从后端请求回来

后端分页适用于数据量偏大时的情况,减小请求传输压力

前端分页

前端分页一般用于数据量较小的情况,一次请求把数据全部从后端请求回来。下面是vue-element-ui的分页组件写法:

需要注意的是:

当前页展示的数据与总数据的关系

let show = this.contactsInfo.slice(this.sizePerPage * (this.activePage - 1), this.sizePerPage * (this.activePage));

当每页条数改变时,当前页设置为首页。防止每页条数变大时,当前页时不存在的页数。

后端分页

后端分页适用于数据量偏大时的情况,减小请求传输压力。前端需要将每页条数和当前页传给后端,后端根据条件查询出数据再传给前端,包括总条数、当前页、每页多少条数据等。

前端显示的当前页和每页多少条数据由后端传回的数据决定,否则出现改变前端参数,还未发请求时,页码的错乱。

当改变每页多少条时,当前页参数置为首页。

template包中建立pagination.py

class Pagination:

    def __init__(self, page, all_count, per_num=3, 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)

分页器

views文件中

from django.shortcuts import render

from CRM import models
from CRM.tools.pagination import Pagination def customer_list(request):
# 从数据库中拿取客户对象
customer_obj = models.Customer.objects.all()
# print(len(customer_obj)) # 实例化分页器的类, 传入参数: 1: 当前页 2: 对象数量 3: 每页展示条数 4: 显示页面个数
pager = Pagination(request.GET.get('page', ''), len(customer_obj), per_num=2, max_show=3)
print(pager.page_end)
return render(request, 'customer_list.html', {
"customer_obj": customer_obj[pager.start:pager.end],
'page_html': pager.page_html,
'last_page': pager.page_num}
)

分页器使用

HTML中 包含首页,尾页

<nav aria-label="Page navigation" style="text-align: center">
<button style="
border: none;
border-radius:4px;
padding:7px 12px;
background-color: #f2f4f2;
vertical-align: middle
">
<a href="?page=1/">首页</a>
</button> <ul class="pagination" style="vertical-align: middle">
{{ page_html|safe }}
</ul> <button style="
border: none;
border-radius:4px;
padding:7px 12px;
background-color: #f2f4f2;
vertical-align: middle
">
<a href="?page={{ last_page }}">尾页</a>
</button>
</nav>

模板中使用

django项目一 分页器(前端分页和后端分页区别)的更多相关文章

  1. EasyUI表格DataGrid前端分页和后端分页的总结

    Demo简介 Demo使用Java.Servlet为后台代码(数据库已添加数据),前端使用EasyUI框架,后台直接返回JSON数据给页面 1.配置Web.xml文件 <?xml version ...

  2. vue2.0+Element UI 表格前端分页和后端分页

    之前写过一篇博客,当时对element ui框架还不太了解,分页组件用 html + css 自己写的,比较麻烦,而且只提到了后端分页 (见 https://www.cnblogs.com/zdd20 ...

  3. jQuery--dataTable 前端分页与后端分页 及遇到的问题

    (1)区别 前端分页:一次性把所有数据全都放在前端,由前端进行处理:适合请求的数据量不大的情况 后端分页:服务器模式,所有的分页,搜索,排序等操作在服务器端完成,然后前端去请求数据:适合量大的情况 ( ...

  4. django项目分页

    测试版本 代码: # 测试分页users=[{'name':'alex{}'.format(i),'pwd':'aaa{}'.format(i)}for i in range(1,302)] def ...

  5. 对一个前端使用AngularJS后端使用ASP.NET Web API项目的理解(4)

    chsakell分享了一个前端使用AngularJS,后端使用ASP.NET Web API的项目. 源码: https://github.com/chsakell/spa-webapi-angula ...

  6. Django项目:CRM(客户关系管理系统)--22--14PerfectCRM实现King_admin分页的省略显示

    {#table_data_list.html#} {## ————————08PerfectCRM实现King_admin显示注册表的字段表头————————#} {% extends 'king_m ...

  7. Django项目:CRM(客户关系管理系统)--21--13PerfectCRM实现King_admin分页页数

    {#table_data_list.html#} {## ————————08PerfectCRM实现King_admin显示注册表的字段表头————————#} {% extends 'king_m ...

  8. 对一个前端使用AngularJS后端使用ASP.NET Web API项目的理解(3)

    chsakell分享了一个前端使用AngularJS,后端使用ASP.NET Web API的项目. 源码: https://github.com/chsakell/spa-webapi-angula ...

  9. 对一个前端使用AngularJS后端使用ASP.NET Web API项目的理解(2)

    chsakell分享了一个前端使用AngularJS,后端使用ASP.NET Web API的项目. 源码: https://github.com/chsakell/spa-webapi-angula ...

随机推荐

  1. [BZOJ2738]矩阵乘法(整体二分+二维树状数组)

    整体二分+二维树状数组. 好题啊!写了一个来小时. 一看这道题,主席树不会搞,只能用离线的做法了. 整体二分真是个好东西,啥都可以搞,尤其是区间第 \(k\) 大这种东西. 我们二分答案,然后用二维树 ...

  2. 08_python_文件操作

    一.初始文件操作 打开⽂件的⽅式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 默认使⽤的是r(只读)模式 f = open("少妇嫩模.t ...

  3. underscore.js源码研究(5)

    概述 很早就想研究underscore源码了,虽然underscore.js这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...

  4. 设置多台机器linux服务器ssh相互无密码访问

    在每台服务器上都执行ssh-keygen -t rsa生成密钥对: $ ssh-keygen -t rsa Generating public/private rsa key pair. Enter ...

  5. git自己用得着的命令

    -----------随笔记记,给自己备份------------ 1.查看分支 查看当前分支:git branch 查看远程所有分支:git branch -r/git branch -a 2.切换 ...

  6. 【原创】用JQury来制作星星打分特效功能

    前言 常常我们看到一些评论,星星打分,今天我们就用Jq代码来实现,看看究竟是如何实现的 其中有两个重要的事件mouseenter和mouseleave效果如下图 代码 <!DOCTYPE htm ...

  7. Linux MBR扇区误删恢复

    目录 1. 引导记录误删恢复 1.1 备份引导记录 1.2 误删引导记录 1.3 恢复引导记录 2. 分区表误删恢复 2.1 备份分区表 2.2 误删分区表 2.3 恢复分区表 如果MBR分区表没了, ...

  8. centos7 安装配置postgresql

    考:https://www.linuxidc.com/Linux/2017-10/147536.htm http://blog.51cto.com/12482328/2090844 https://w ...

  9. Docker Swarm 日常运维命令笔记

    之前介绍了Docker管理工具-Swarm部署记录,这里简单总结下Docker Swarm的日常维护命令,以作为平时运维笔记. Swarm作为一个管理Docker集群的工具,首先需要将其部署起来,可以 ...

  10. springboot 单体架构之shiro集成

    这里使用的是eclipse 开发工具 1.springboot 版本是2.0的,引入了2个shiro 的依赖,如下 <parent> <groupId>org.springfr ...