Как перечислить названия представлений в Plone 4 для конкретного интерфейса? - PullRequest
1 голос
/ 02 февраля 2012

Есть ли какой-либо простой способ в системе компонентов 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 на что-то более конкретное заставляет его возвращать пустой кортеж.

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

1 Ответ

3 голосов
/ 02 февраля 2012

Да.

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

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

И отфильтруйте его так, как вы хотите.

...