第五章、分页功能开发

5.1.修改BaseKingAdmin和完善前段页面显示

现在访问没有注册的model会报错,因为基类中没有写list_display和list_filter。

在基类中设置一个空列表就可以了

# kingadmin/admin_base.py

class BaseKingAdmin(object):

    list_display = []
list_filter = []
   search_fields = []

现在访问没有报错,但是没有显示出数据,需要在 build_tab_row 里面添加个判断

kingadmin_tags.py

@register.simple_tag
def build_table_row(obj,admin_class):
'''生成一条记录的html element''' ele = ''
if admin_class.list_display:
for column_name in admin_class.list_display:
#获取所有字段对象
column_obj = admin_class.model._meta.get_field(column_name)
#字段对象的choices方法,如果有choices,则get_xxx_display
if column_obj.choices:
column_data = getattr(obj,'get_%s_display'%column_name)()
else:
column_data = getattr(obj,column_name)
td_ele = "<td>%s</td>" % column_data
ele += td_ele
else:
td_ele = "<td>%s</td>"%obj
ele += td_ele

在table_obj_list.html添加一个判断

(2)完善前端页面显示

配置了list_display的显示所有列名,没配置的应该显示model name

table_obj_lsit.html

<thead
<tr>
{% if admin_class.list_display %}
{% for column in admin_class.list_display %}
<th>{{ column }}</th>
{% endfor %}
{% else %}
<th>{% get_model_name admin_class %}</th>
{% endif %}
</tr>
</thead>

kingadmin_tags.py

@register.simple_tag
def get_model_name(admin_class):
'''获取表名'''
return admin_class.model._meta.model_name.upper()

前端显示效果

5.2.分页功能开发

django官网paginationg使用说明

官网实例

(1)kingadmin/views.py

@login_required
def table_obj_list(request, app_name, model_name):
'''取出指定model里的数据返回给前端'''
#拿到admin_class后,通过它找到拿到model
admin_class = site.enable_admins[app_name][model_name]
querysets = admin_class.model.objects.all()
#过滤
querysets,filter_conditions = get_filter_result(request,querysets)
admin_class.filter_conditions = filter_conditions
#分页
paginator = Paginator(querysets, 2)
page = request.GET.get('page')
try:
querysets = paginator.page(page)
except PageNotAnInteger:
querysets = paginator.page(1)
except EmptyPage:
querysets = paginator.page(paginator.num_pages) return render(request, 'kingadmin/table_obj_list.html',{'querysets':querysets,'admin_class':admin_class})

(2)table_obj_lsit.html

<div class="pagination">
<span class="step-links">
{% if querysets.has_previous %}
<a href="?page={{ querysets.previous_page_number }}">previous</a>
{% endif %} <span class="current">
Page {{ querysets.number }} of {{ querysets.paginator.num_pages }}.
</span> {% if querysets.has_next %}
<a href="?page={{ querysets.next_page_number }}">next</a>
{% endif %}
</span>
</div>

这个时候访问页面,确实实现分页了,但是点下一页会报错

因为在后台把page='2'当成过滤条件了,添加个判断

kingadmin/views.py

5.3.分页功能优化

Bootstrap分页组件

(1)kingadmin_tag.py

@register.simple_tag
def render_paginator(querysets):
'''分页'''
ele = '''
<ul class="pagination">
'''
#page_range是所有的页,querysets.number是当前页
for i in querysets.paginator.page_range:
#显示前后三页,abs是绝对值
if abs(querysets.number - i) < 3:
active = ''
if querysets.number == i: #如果是当前页,class='active'
active = 'active'
p_ele = '''<li class="%s"><a href="?page=%s">%s</a></li>'''%(active,i,i)
ele += p_ele
ele += "</ul>"
return mark_safe(ele)

(2)table_obj_list.html

效果:

 

CRM客户关系管理系统(五)的更多相关文章

  1. Django CRM客户关系管理系统

    CRM需求分析 随着信息化时代带来的科技创新,CRM客户关系管理系统带来的效益在已经成为很多企业提高竞争优势的一分部,CRM客户关系管理系统将企业管理和客户关系管理集成到统一的平台,其系统功能主要体现 ...

  2. CRM 客户关系管理系统

    CRM(Customer Relationship Manager)客户关系管理系统 企业为提高核心竞争力,利用相应的信息技术以及互联网技术协调企业与顾客间在销售.营销和服务上的交互,从而提升其管理方 ...

  3. CRM客户关系管理系统 北京易信软科信息技术有限公司

    北京易信软科信息技术有限公司 推出大型erp系统,库存管理系统,客户关系管理系统,车辆登记管理系统,员工管理系统,采购管理系统,销售管理系统,为您的企业提供最优质的产品服务 北京易信软科您可信赖的北京 ...

  4. CRM客户关系管理系统-需求概设和详设

    大概设计 大概设计就是对需求进行一个整体性分析,把需要实现的功能都列出来,对于客户关系管理系统,我们需要从角色出发,从而确定有哪些需求,最好是画个思维导图 首先我们是为培训学校这么一个场景来开发的,所 ...

  5. CRM客户关系管理系统有哪些优缺点?

    CRM系统不仅仅是一种技术,也是面向企业的客户管理系统.客户关系管理软件可以帮助销售员快速地找到客户信息,帮助销售员跟踪客户直到完成订单.为提高企业销售效率,CRM被越来越多的企业所采用. 那么,作为 ...

  6. CRM客户关系管理系统(一)

    第一章.CRM介绍和开发流程 1.1.CRM简介 客户关系管理(CRM) 客户关系管理(customer relationship management)的定义是:企业为提高核心竞争力,利用相应的信息 ...

  7. Django项目:CRM(客户关系管理系统)--84--74PerfectCRM实现CRM权限和权限组限制访问URL

    #models.py # ————————01PerfectCRM基本配置ADMIN———————— from django.db import models # Create your models ...

  8. Django项目:CRM(客户关系管理系统)--85--75PerfectCRM实现CRM扩展权限

    # sales_urls.py # ————————47PerfectCRM实现CRM客户报名流程———————— from django.conf.urls import url from bpm. ...

  9. Django项目:CRM(客户关系管理系统)--82--72PerfectCRM实现CRM动态菜单和角色

    #models.py # ————————01PerfectCRM基本配置ADMIN———————— from django.db import models # Create your models ...

  10. Django项目:CRM(客户关系管理系统)--73--63PerfectCRM实现CRM讲师下载作业

    # teacher_urls.py # ————————62PerfectCRM实现CRM讲师讲课记录———————— from django.conf.urls import url from bp ...

随机推荐

  1. Python基础-用户验证

    一.项目需求 1.根据用户名和密码,验证用户是否可登陆 2.允许一次执行可验证三次 3.当用户名输错三次后,该用户名锁定,永久不可登陆 二.代码如下 #!/usr/bin/env python #-* ...

  2. 如何把百度统计代码放入JS文件中?百度统计的JS脚本原理分析

    <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script&quo ...

  3. Java:日期类Date与Calendar

    Timestamp类型与日期类型之间的转化? Timestamp timestamp = Timestamp.valueOf("2017-03-17 07:00:00"); Dat ...

  4. POJ-2570 Fiber Network---Floyd+二进制表示集合

    题目链接: https://vjudge.net/problem/POJ-2570 题目大意: 一些公司决定搭建一个更快的网络,称为"光纤网".他们已经在全世界建立了许多站点,这 ...

  5. CountDownLatch与thread-join()的区别

    今天学习CountDownLatch这个类,作用感觉和join很像,然后就百度了一下,看了他们之间的区别.所以在此记录一下. 首先来看一下join,在当前线程中,如果调用某个thread的join方法 ...

  6. 【Java入门提高篇】Day15 Java泛型再探——泛型通配符及上下边界

    上篇文章中介绍了泛型是什么,为什么要使用泛型以及如何使用泛型,相信大家对泛型有了一个基本的了解,本篇将继续讲解泛型的使用,让你对泛型有一个更好的掌握和更深入的认识. 上篇中介绍完泛型之后,是不是觉得泛 ...

  7. JavaScript初探之字符串与数组

    一直在研究JS以至于忘记跟新博客... 字符串:// str.charAt(x); //获取下标为x的字符// str.indexOf(",",1); //获取",&qu ...

  8. 设计APP时我们该怎么做

    不得不承认,手机APP已经渗透到我们的生活中,根据数据统计,人们每天平均有3.9个小时是花费在手机APP的使用上的,可以预见,手机APP正在改变我们的生活.手机APP受到人们的欢迎,很多商家也看到了其 ...

  9. wifi 破解笔记

        最近小夜刚刚学习了无线WiFi的密码破解,感觉很神奇,不过以下操作都是作为学习测试的内容进行的,希望志同道合的小伙伴切不要触碰法律的红线哦!       话不多说,直接上硬菜.     实验环 ...

  10. hdu 5877 线段树(2016 ACM/ICPC Asia Regional Dalian Online)

    Weak Pair Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...