Plone - получение и перечисление объектов из папки участника в представлении

я хотел бы создать представление, в котором перечислены объекты в определенной папке (скажем, root/Members/myname). Как это сделать? Я не знаю, как обратиться к папке. Что-то вроде:

items = []
folder = getFolder('/Members/' + myname)
for i in folder:
    if isinstance(news, i):
        items.append(i.title)

Hm?


person marxin    schedule 03.08.2012    source источник
comment
Ответы ниже правильные, достаточные для получения самих объектов. Я бы посоветовал знать обстоятельства, при которых вам нужны только идентификаторы, так как folder.contentIds() всегда будет быстрее для этого случая, чем использование каталога.   -  person sdupton    schedule 05.08.2012


Ответы (2)


Вы можете попросить каталог перечислить содержимое данной папки, используя индекс пути, с ограничением глубины:

from Products.CMFCore.utils import getToolByName

catalog = getToolByName(context, 'portal_catalog')
contents = catalog(path=dict(query='/root/Members/' + myname, depth=1))

Дополнительную информацию см. в разделе запрос каталога. Информация.

В качестве альтернативы вы можете перейти к рассматриваемой папке и вызвать для нее метод кожи getFolderContents:

memberFolder = context.unrestrictedTraverse('/root/Members/' + myname)
contents = memberFolder.getFolderContents()

Последний выполняет поиск по каталогу за вас.

person Martijn Pieters    schedule 03.08.2012
comment
Следует уточнить, что содержимое в первом примере представляет собой последовательность объектов мозга? ОП может не знать различия между мозгом каталога и объектом, к которому он относится. объекты = [brain.getObject() для мозга в содержимом] # или brain._unrestrictedGetObject(), когда это необходимо - person sdupton; 05.08.2012

Вы можете сделать это следующим образом:

items = [obj.Title 
           for id,obj in context['test-folder'].items()
               if isinstance(news, obj)]

Дополнительная информация: http://collective-docs.readthedocs.org/en/latest/content/listing.html#listing-the-folder-items-using-portal-catalog.

person Giacomo Spettoli    schedule 03.08.2012