假设:
Folder
- Document
- Document
- Folder1
- Document
- Document
如果我使用Folder作为路径执行portal_catalog,我会得到:
[<Products.ZCatalog.Catalog.mybrains object at 0xdba8d9c>,
<Products.ZCatalog.Catalog.mybrains object at 0xdd71234>,
<Products.ZCatalog.Catalog.mybrains object at 0xdd71324>,
<Products.ZCatalog.Catalog.mybrains object at 0xdd712fc>,
<Products.ZCatalog.Catalog.mybrains object at 0xdd71194>]
但是我希望有一个portal_catalog来保存层次结构上下文,例如:
{
"Folder":
[
<Products.ZCatalog.Catalog.mybrains object at 0xdba8d9c>,
<Products.ZCatalog.Catalog.mybrains object at 0xdba8d9c>,
{
"Folder1":[
<Products.ZCatalog.Catalog.mybrains object at 0xdba8d9c>, <Products.ZCatalog.Catalog.mybrains object at 0xdba8d9c>
]
}
]
}
所以,如果它是一个文件夹类型,它的id是dict中的一个键。
是否有可能有类似的数据strcuture(保持对象的层次结构),或者我必须创建自己的递归函数(我知道上面的结构可能不存在,但我想你可以得到这个想法)?由于性能问题,我正在考虑使用portal_catalog
和大脑。
谢谢!
答案 0 :(得分:4)
我认为您可以sort_on
path
索引。这意味着您的目录查询结果将按层次结构排序。然后,您可以以递归方式使用itertools.groupby来获取所描述结构的迭代器。棘手的部分将是递归。您将要使用groupby的键函数,为当前文件夹深度/递归级别选择brain.getPath()的相应部分。
答案 1 :(得分:2)
您可能还会查看站点地图生成器,它会提供嵌套的导航结构。
这里是一个(位)相关链接:Navigation portlet: all childen always expanded