python django 多级业务树形结构规划及页面渲染 概述:   在项目中,父级到子级结构并不少见,如果仅仅的两层树形结构,我们可以使用数据库的外键设计轻松做到,子级业务表设计一字段外键到父级

来源:互联网 发布:hishop销客多源码 编辑:程序博客网 时间:2024/06/04 19:44
转载:http://www.cnblogs.com/jyh317/p/3763564.html

概述:

  在项目中,父级到子级结构并不少见,如果仅仅的两层树形结构,我们可以使用数据库的外键设计轻松做到,子级业务表设计一字段外键到父级业务表,这样子到父、父到子的查询都非常简单。

  但是往往父子结构会有一级二级三级等等多层规划,因为子结构的层数是不定的,子可以有子,再子;这样的树形下去,外键设计就不可行了。

项目说明

  设计一个 业务 树形结构规划,多层灵活型结构,

  从 建表设计 到  浏览器前端展示 整体的结构规划

  使用 python django web框架;和一个js 树形结构插件treeview(插件说明 http://www.cnblogs.com/jyh317/p/3763564.html)

表设计

  使用django models 设计表, 字段如下,新增业务时,在 upper_business 字段填上该业务的直属上级业务 ID 号(此id号为该表中已经存在的业务id号),若新增业务为最上级业务 upper_business 为空

复制代码
1 #工作业务2 class Business_detail(models.Model):3     upper_business = models.IntegerField(blank=True, null=True, verbose_name=u'上级业务')4     name = models.CharField(max_length=100, unique=True, verbose_name=u'业务名称')5     info = models.TextField(max_length=200, null=True, blank=True, verbose_name=u'业务说明')6     domain = models.CharField(max_length=50, null=True, blank=True, verbose_name=u'域名')7     monitor_url = models.CharField(max_length=50, null=True, blank=True, verbose_name=u'监控页面')8     comment = models.CharField(max_length=100, blank=True, null=True, verbose_name=u'备注')
复制代码

  在 django admin 后台添加新业务如图;可自行设计自己的前端新增业务页面,约束字段(如上级业务必须填写已存在id)

########  开始前端展示 #########

视图函数

   在django views 中添加业务展示视图,使用django 特色models 查询出第一级业务(第一级业务唯一)传递到模板层

1 def businessBasic(request):2     businessObj = Business_detail.objects.all()3     firster = businessObj.get(id=1)     #得到第一级业务4     return render_to_response('eams/businessBasic.html', locals())

前端模板

  浏览此下之前,需要对js 树形结构插件treeview 的使用有所了解

  先载入treeview js文件
1 <link href="/static/treeview/jquery.treeview.css" rel="stylesheet" type="text/css" />2 <script type="text/javascript" src="/static/treeview/lib/jquery.cookie.js"></script>3     <script type="text/javascript" src="/static/treeview/jquery.treeview.js"></script>
  业务树div 主体设计
复制代码
 1         {% load eamsfilter %}    <!-- 载入自定义模板过滤器 --> 2         <div style="width: 30%; border-right: 1px solid #D8D8D8; min-height: 300px; overflow: auto; float: left"> 3             <ul id="tree" class="filetree"> 4                 <li><span id="business_{{ firster.id }}" class="folder">{{ firster.name }}</span> 5                     {% if firster.id|getNextBusiness %}  <!-- 使用模板过滤器,判断得到直属下级业务列表,过滤器代码在楼下 --> 6                         <ul> 7                         {% for node in firster.id|getNextBusiness %} <!-- 遍历下级业务节点 --> 8                             {% include "eams/businessNode.html" %}  <!-- 引用业务节点 li 模板,(此处核心设计)楼下单独解释 --> 9                         {% endfor %}10                         </ul>11                     {% endif %}12                 </li>13             </ul>14             <script type="text/javascript">15             $("#tree").treeview();16             </script>17         </div>
复制代码
  模板过滤器(eamsfilter.py)代码, 此处不做更多解释
复制代码
1 #-*-coding:utf-8-*-2 __author__ = 'zhouwang'3 from eams_apps.models import *4 from django import template5 register = template.Library()6 @register.filter(name='getNextBusiness')7 def getNextBusiness(value):8     return Business_detail.objects.filter(upper_business = value)
复制代码
  节点模板(核心)eams/businessNode.html,当父级业务判断有下级业务时,引入此模板,提出节点代码为单独的html文件,方便复用及模板层的迭代,模板迭代的设计,实现业务节点多层(未知层数)结构展示
复制代码
 1 {% load eamsfilter %}  <!-- 载入过滤器 --> 2 <li><span id="business_{{ node.id }}" class="folder">{{ node.name }}</span>  <!-- 渲染当前遍历的节点 --> 3     {% if node.id|getNextBusiness %}  <!-- 通过过滤器, 判断得到当前业务节点是否有下级业务--> 4         <ul> 5         {% for node in node.id|getNextBusiness %}  <!-- 遍历当前业务节点的下级业务节点 --> 6             {% include "eams/businessNode.html" %}  <!-- 再次引入自身页面、判断节点、遍历节点等等, 实现深层迭代得到多级业务节点 --> 7         {% endfor %} 8         </ul> 9     {% endif %}10 </li>
复制代码

前端效果

  模板代码预留了业务节点 id 号,前端点击触发业务节点,ajax 请求节点业务信息及页面展示获取的节点信息, 不再继续阐述。。。

 

分类: python,django
标签: python, django
好文要顶 关注我 收藏该文  
卑鄙的wo
关注 - 0
粉丝 - 1
+加关注
0
0
« 上一篇:python tornado websocket 实时日志展示
» 下一篇:nginx+uwsgi 部署 django
posted @ 2016-10-19 17:53 卑鄙的wo 阅读(1152) 评论(0)  编辑 收藏

阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 自己娘家妈总说婆家人坏话怎么办 娘家婆家老公都没有依靠怎么办? 2岁宝宝断奶粉怎么办 2岁宝宝夜奶频繁怎么办 宝宝15个月还在吃夜奶怎么办 宝宝两岁四个月还吃母乳怎么办 宝宝睡前老是找奶吃怎么办 宝宝戒奶晚上哭怎么办 宝宝戒奶半夜哭怎么办 吸习惯母乳不吸奶嘴怎么办 八个月宝宝奶睡怎么办 宝宝要吸着奶睡怎么办 戒母乳胸胀的疼怎么办 断奶孩子晚上哭的厉害怎么办 喜欢咬指甲的人怎么办? 成年了还咬指甲怎么办 戒奶乳房有硬块怎么办 戒奶七天有硬块怎么办 两岁宝宝喘气粗怎么办 两岁宝宝断不了奶怎么办 两岁宝宝不愿意喝奶粉怎么办 吃母乳不愿意吃奶粉怎么办 母乳宝宝不愿意喝奶粉怎么办 宝宝断母乳不喝奶粉怎么办 9个月宝宝不会爬怎么办 孩子五年级学习成绩差该怎么办 孩子临近中考学习成绩很差该怎么办 初中生成绩不好家长该怎么办 成绩差该怎么办贴吧 宝宝只会匍匐爬怎么办 一年级的孩子数学不好怎么办 小学一年级孩子数学不好怎么办 孩子上一年级数学太差怎么办 智商低情商也低怎么办? 孩子字写得很大怎么办 孩子拿笔重 写字太黑 怎么办 孩子语文成绩好数学不行怎么办? 孩子现在二年级特别叛逆怎么办 孩子又笨又蠢怎么办 四年级孩子数学计算能力差怎么办 孩子四年级数学理解能力差怎么办