2

认为:

Folder
  - Document
  - Document
  - Folder1
    - Document
    - Document

如果我使用文件夹作为路径做一个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 是来自字典的键。

是否可能有类似的数据结构(保持对象的层次结构),或者我必须创建自己的递归函数(我知道上面的结构可能不存在,但我认为你可以理解) ? portal_catalog由于性能问题,我正在考虑使用和大脑。

谢谢!

4

2 回答 2

4

我想你可以sort_on索引path。这意味着您的目录查询结果将按层次结构排序。然后,您可以以递归方式使用itertools.groupby来获取您描述的结构的迭代器。棘手的部分将是递归。您需要为 groupby 使用一个键函数,该函数为当前文件夹深度/递归级别选择 Brain.getPath() 的适当部分。

于 2011-08-19T01:40:29.023 回答
2

您还可以查看提供嵌套导航结构的站点地图生成器。

在这里,一个(位)相关链接:Navigation portlet: all children always expand

于 2011-08-19T09:59:48.047 回答