0

我正在使用 Webix 和 Python/Flask 开发一个项目,并且我在渲染树视图小部件时遇到了难题。我的问题是正确构建小部件所需的 JSON。我正在尝试生成给定示例的目录结构:

结构:

.
├── 地龙
│ └── 文件
├── 目录三
│ ├── somedir
│ │ └── 另一个文件
│ └── somefile
├── 脏兮兮的
└── 一些文件

期望的输出:

[
    {
        "value": "dirone",
        "path": "dirone",
        "type": "folder",
        "children": [
            {
                "value": "file",
                "path": "dirone/file",
                "type": "file"
            }
        ]
    },
    {
        "value": "dirtwo",
        "path": "dirtwo",
        "type": "folder",
        "children": []
    },
    {
        "value": "dirthree",
        "path": "dirthree",
        "type": "folder",
        "children": [
            {
                "value": "somefile",
                "path": "dirthree/somefile",
                "type": "file"
            },
            {
                "value": "somedire",
                "path": "dirone/file",
                "type": "folder",
                "children": [
                    {
                        "value": "anotherfile",
                        "path": "dirthree/somedir/anotherfile",
                        "type": "file"
                    }
                ]
            }
        ]
    },
    {
        "value": "somefile",
        "path": "somefile",
        "type": "file"
    }
]

在过去的两个小时里,我一直在努力寻找一种可以渲染它的方法。有没有生成结构的方法?任何帮助将不胜感激!

4

2 回答 2

0

这不是一个真正的解决方案,但可以将 Webix 小部件配置为使用具有不同结构的 json,或者,在案例或树的情况下,加载数据记录的普通列表并通过按某些参数对数据进行分组来构建树结构

检查例如 http://docs.webix.com/samples/17_datatree/01_loading/07_load_group.html

于 2015-03-20T09:49:48.333 回答
0

我想我在没有 os.walk() 的情况下得到了我需要的东西,但我仍然通过递归函数 (boo) 来做:

def pathTree(path,id=0):
    id += 1
        tree = {'value': os.path.basename(path)}
        tree['path'] = path
    tree['id'] = id
        if os.path.isdir(path):
            tree['type'] = "folder"
            tree['data'] = [pathTree(os.path.join(path,x),id) for x in os.listdir(path)]
    else:
            tree['type'] = "file"
    return(tree)

我现在唯一真正想要的(虽然还不是真正的受益者)是让它记录水平/迭代深度。

感谢您的建议!

于 2015-03-20T22:47:54.393 回答