ztree使用方法 python后台

一、在提前加载js的地方写一段js,判断该页面是否需要添加ztree,我的项目所有提前加载的js都写在admin.js中
//增加ztree
$(document).ready(function() {
    var t = $(‘#tree-style‘).text();
    if(t.length>0){
            $(‘#col‘).addClass(‘sevice-table-container‘);
    }
});
二、修改要显示ztree的html页面
{% extends ‘layouts/admin_table_view.html‘ %}
////  在admin_table_view.html中添加{% block tree %},在当前页面的{% block tree %}中加一个div,class要指明为ztree,他的样式来自于
zTreeStyle.css///
{% block tree %}
    <div id="tree-style" class="ztree-style">
        <ul id="Servicetree" class="ztree"></ul>
    </div>
{% endblock %}
/////
{% block table_title %}
<h2>服务列表 <a type="button" href="{{url_for(‘admin.new_service_view‘)}}"class="btn btn-default btn-sm">
  <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> 新增服务
</a></h2>
{% endblock%}

{% block table_header%}
    <th>服务名称</th>
    <th>服务管理员</th>
    <th>服务等级</th>
    <th>父级服务</th>
    <th>上线时间</th>
    <th>下线时间</th>
    <th>操作</th>
{% endblock%}

{% block table_scripts %}
<script>
var table_obj = {
    "ajax":"{{url_for(‘api.get_services‘)}}",
    "columns":[
        {"data":"service_name"},
        {"data":"manager"},
        {"data":"service_level"},
        {"data":"parent_service_id"},
        {"data":null},
        {"data":null},
        {"data":null}
    ],
    "columnDefs":[
        {
        "targets": -3,
        "data": null,
        "render": function ( data, type, full, meta ) {
            var d = new Date(data.online_date)
            return moment.utc(d).format(‘YYYY-MM-DD‘);
        }
    },
        {
        "targets": -2,
        "data": null,
        "render": function ( data, type, full, meta ) {
            var d = data.offline_date
            if (d == null)
            {return ‘‘}
            else
            {   d = new Date(d)
                return moment.utc(d).format(‘YYYY-MM-DD‘);}
        }
    },
        {
        "targets": -1,
        "data": null,
        "render":  function ( data, type, full, meta ) {
            return ‘<a id="aburl" href="‘+data.view_url+‘" class="btn btn-sm btn-info item-detail" data-id=‘
                    +data.id
                    +‘>修改</a> <button class="btn btn-sm btn-danger item-remove" data-id=‘
                    +data.id
                    +‘>删除</button>‘;
        }
    }]
};
</script>
{% endblock%}

///在admin_table_view.html中添加{% block tree_scripts %},在当前页面的{% block tree_scripts %}中加一个js scripts,
另外,ztree使用的自带核心js是jquery.ztree.core.js,同时它依赖官方jquery>1.5版本,使用时先引入jquery
{% block tree_scripts %}
     <script>
       var zTreeObj;
       // zTree 的参数配置,深入使用请参考 API 文档(setting 配置详解)
       var setting = {
            data: {
                simpleData: {
                    enable: true,
                    idKey: "id",  //节点id
                    pIdKey: "pId",//父id
                    rootPId: 0 //根id,一般为0即可
                }
            },
           async: {
                enable: true,
                contentType: "application/json",
                url: "{{url_for(‘api.generate_tree‘)}}",  //获取数据的接口
                autoParam: ["id", "name"],  //根据id,name来获取数据
                type:"get"   //从接口获取数据的方式
            }
       };

       $(document).ready(function(){
          zTreeObj = $.fn.zTree.init($("#Servicetree"), setting);
       });
      </script>
{% endblock %}

三、叶子节点的图标样式zTreeStyle.css

父节点打开.ztree li span.button.ico_open{margin-right:2px;  vertical-align:top; *vertical-align:middle;background:url(../images/img/open-folder-16.png) no-repeat scroll 0 0 transparent;}
父节点关闭.ztree li span.button.ico_close{margin-right:2px; vertical-align:top; *vertical-align:middle;background:url(../images/img/close-folder.png) no-repeat scroll 0 0 transparent;}
叶子节点.ztree li span.button.ico_docu{margin-right:2px; vertical-align:top; *vertical-align:middle;background:url(../images/img/layer_16px.png) no-repeat scroll 0 0 transparent;}

四、接口生成需要的数据,必须是json格式
@api.route(‘/services_tree/‘, methods=[‘GET‘])
@token_authorize
def generate_tree():
    #返回服务树的函数
    services_tree = Services.query.all()
    zNodes = [d.tree_to_json() for d in services_tree]
    zNodes.append({"id": "-1", "pId": "0", "name": "服务", "open": "True"}) #添加根节点显示的内容,根节点id设为-1,根节点没有父id,顾令其父id为0
    return jsonify(zNodes)

五、model获取每条相应数据
    def tree_to_json(self):
        """返回服务树的相关数据"""
        service_post = {
            ‘id‘: self.id,
            ‘pId‘: self.parent_service_id or ‘-1‘,  #如果不存在父id,则令父id为-1
            ‘name‘: self.service_name,
            ‘url‘: url_for(‘admin.get_service_view‘, id=self.id, _external=True)  #注意这里的字段名为ztree规定好的字段名
        }
        return service_post
时间: 2024-10-14 06:42:36

ztree使用方法 python后台的相关文章

get 方法向后台提交中文乱码问题

前端js代码 function searchAll(){      var contentStr = $('#contentStr_id').val();      contentStr =encodeURI(contentStr);      alert(contentStr);      $('#tt').datagrid('options').url='propose!page.action?test=' + contentStr;      $('#tt').datagrid('relo

请求一个方法,后台能正常执行,前台报错404

************请求一个方法,后台能正常执行,前台报错404************ 前言:我是通过ajax请求,虽然后台能正常执行, 但是ajax却不能执行success方法,执行了error方法. 前台报错404,说找不到XX.jsp页面. 后台方法是一个没有返回值的方法. 分析:找不到页面,说明是去寻找视图解析器了.那么我们这个不需要返回,怎么办呢. 分析后发现,后台的方法要么是请求modelAndView,要么返回的是json. 所以我们这个方法虽然没有返回,但是还是要在方法上写

06_私有属性和私有方法-python

私有属性和私有方法 01. 应用场景及定义方式 应用场景 在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问到 私有属性 就是 对象 不希望公开的 属性 私有方法 就是 对象 不希望公开的 方法 定义方式 在 定义属性或方法时,在 属性名或者方法名前 增加 两个下划线,定义的就是 私有 属性或方法 class Women: def __init__(self, name): self.name = name # 不要问女生的年龄 self.__age

百度编辑器的Python后台

公司最近要做一个内容管理系统,需要在后台集成一个百度编辑器,考察了一下,都推荐百度编辑器. 百度编辑器在HTML中的嵌入很容易,把给出的样例复制到自己的HTML中即可,我不是前端,但是根据我的测试,应该是要引入JQuery的. 嵌入之后,百度编辑器基本就可以使用了,常见的文本格式都可以保存到数据库中,需要的时候直接取出,格式依然还在,看来我的大业已经完成大半了. 这里需要注意的是,如果展示到前台的文档被转义了,比如<p>显示成了<p>之类的,那么就需要查怎么关闭teplate转义,

python扩展实现方法--python与c混和编程

Reference: http://www.cnblogs.com/btchenguang/archive/2012/09/04/2670849.html python 头文件在的位置:/usr/include/python2.7                                  /usr/local/include/python2.7 前言(更新:更方便易用的方式在http://www.swig.org/tutorial.html) 大部分的Python的扩展都是用C语言写的,

python 后台爆破工具(多线程)

非阻塞 q.put(item) 写入队列,timeout等待时间 q.put_nowait(item) 相当q.put(item, False) threads多线程     首先导入threading 模块,这是使用多线程的前提 appent 把每个线程放在threads列表里 start 开始 join 主线程等待子线程完成. #!/usr/bin/env python# -*- coding: utf-8 -*- import sysimport requestsimport Queuei

矩阵或多维数组两种常用实现方法 - python

在python中,实现多维数组或矩阵,有两种常用方法: 内置列表方法和numpy 科学计算包方法. 下面以创建10*10矩阵或多维数组为例,并初始化为0,程序如下: # Method 1: list arr1 = [[0]*10 for i in range(10)] arr1[0][0] = 1 print "Method 1:\n", arr1 arr2 = [[0 for i in range(10)] for i in range(10)] arr2[0][0] = 1 pri

文件处理之复杂,在于内置方法-----python

抛砖引玉: 文件是我们储存信息的地方,我们经常要对文件进行读.写.删除等的操作,在Python中,我们可用Python提供的函数和方法方便地操作文件. ***********************************************文件处理的函数和方法************************************************* 使用Open()函数可打开文件,语法格式如下: f = open(filename,mode,unicoding = "utf-8&q

CoreLocation 的基本使用 以及定位 指南针的实现 (附加: 系统版本适配的方法,和后台更新用户位置的方法及注意)

#import "ViewController.h" #import <CoreLocation/CoreLocation.h> @interface ViewController ()<CLLocationManagerDelegate> @property(nonatomic ,strong)CLLocationManager * manager; @end @implementation ViewController - (void)viewDidLoad