Как перечислить имена представлений в Plone 4 для определенного интерфейса?

Есть ли простой способ в системе компонентов zope перечислить все виды (и их имена), которые были зарегистрированы для определенного интерфейса (например, IMyInterface):

<browser:page
  name="content-item-plain"
  for=".interfaces.IMyInterface"
  class=".content_item.MyView"
  permission="zope2.View"
  layer="my.model.browser.interfaces.IMyModelLayer"
  template="templates/content_item_plain.pt"
/>
class MyView(BrowserView):
    implements(ISomeInterface)

Или, еще лучше, те, которые реализуют определенный интерфейс (ISomeInterface)?

Результатом должен быть список/кортеж классов (MyView, MyView1,...) и/или имен ("content-item-plain",...).

Нет проблем добавить classImplements/classProvides в класс MyView, если это поможет.

До сих пор много чего перепробовал. Ближайшее это:

from zope.component import getGlobalSiteManager
gsm = getGlobalSiteManager()
gsm.adapters.lookupAll((IMyInterface, IMyModelLayer), provided=Interface))

но это дает слишком много результатов, и изменение provided на что-то более конкретное приводит к тому, что он возвращает пустой кортеж.

С результатами должна быть возможность поиска атрибутов класса представления.


person Roman Susi    schedule 02.02.2012    source источник


Ответы (1)


да.

Получить список:

http://docs.plone.org/develop/plone/views/browserviews.html#listing-available-views

И фильтруй как хочешь.

person Mikko Ohtamaa    schedule 02.02.2012
comment
Спасибо за ответ. У меня нет другого выбора, кроме как принять это, потому что теперь мне кажется, что нет волшебного метода найти эти представления без небольшой дополнительной фильтрации. В дополнение к тому, что сказано в документах, я могу использовать свой слой для ограничения количества просмотров: Registration.getViews(IMyLayer) и затем фильтровать. - person Roman Susi; 03.02.2012
comment
ссылка битая.. исправьте пожалуйста - person sureshvv; 07.05.2014
comment
docs.plone.org/develop/plone/views/ - person sureshvv; 07.05.2014