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)
Другие вопросы по тегам