Plone 3: Как загрузить результаты коллекции в шаблоне страницы
Я пытаюсь показать результаты трех коллекций в шаблоне страницы. Как я могу сделать эту работу?
4 ответа
Я нашел решение.
Пример:
<ul tal:repeat="data context/list-open/queryCatalog">
<li tal:content="data/Title">title</li>
</ul>
Объект "list-open" является коллекцией.
Для TTW-решения и, если требуется только в одном месте, можно также установить Products.ContentWellPortlets, создать страницу и назначить три коллекционных портлета для этой страницы.
Сначала вам нужно будет создать browserView.
В этом браузере, добавьте метод, который возвращает 3 слитых коллекции, вы можете получить какую-либо сортировку или другую обработку в результирующем списке.
def myNewCompiledCollection(self):
""" """
list1 = self.context.list1.queryCatalog()
list2 = self.context.list2.queryCatalog()
list3 = self.context.list3.queryCatalog()
resultList = list1 + list2 + list3
return resultList
В шаблоне браузера просто сделайте это:
<ul tal:repeat="data view/myNewCompiledCollection">
<li tal:content="data/Title">title</li>
</ul>
Просто добавив результаты каждой коллекции в список, вы можете получить повторяющиеся записи в вашем результате.
brains1 = collection1.ueryCatalog()
brains2 = collection2.ueryCatalog()
brains3 = collection3.ueryCatalog()
results = brains1 + brains2 + brains3
afaik вы не можете использовать набор для очистки вашего списка, так как мозги для одного и того же объекта не обязательно являются одинаковыми объектами. так что это, скорее всего, тоже не работает:
set(results)
однако вы можете извлечь запросы из коллекций и объединить их с помощью Products.AdvancedQuery или - что может быть проще сделать - превратить свой список результатов в список идентификаторов и выполнить дополнительный поиск по каталогу:
uids = [brain.UID for brain in results]
results_without_dups = catalog(UID=uids)