./helpers.py
from plone.app.contentlisting.catalog import CatalogContentListingObject
from plone.dexterity.browser.view import DefaultView
from plone.memoize.view import memoize
from zope.interface import implementer
class WidgetListingObject(CatalogContentListingObject):
"""Wrap a CatalogContentListingObject and add widgets."""
def __init__(self, brain, request):
self._brain = brain
self.request = request
def getObject(self):
return self._brain.getObject()
@property
@memoize
def widgets(self):
obj = self.getObject()
view = DefaultView(obj, self.request)
view.update()
return [w for name, w in view.widgets.items()]
./browser/views.py
from ..helpers import WidgetListingObject
from plone.app.contenttypes.browser.collection import CollectionView
class ItemFieldsView(CollectionView):
"""returns a collection full item view that includes widgets"""
@property
def full_items(self):
brains = self.results()
log.info(brains)
return [WidgetListingObject(brain, self.request) for brain in brains]