首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Plone中获取所有已注册的'browser:resource‘

如何在Plone中获取所有已注册的'browser:resource‘
EN

Stack Overflow用户
提问于 2013-08-13 21:14:49
回答 1查看 148关注 0票数 4

如何从组件注册表中获取所有已注册的browser:resourcebrowser:resourceDirectory

我在不同的地方查找,试图发现zcml指令browser:resource创建了哪种类型的组件,并找到了带有registerAdapter调用的Products.Five.browser.metaconfigure

代码语言:javascript
复制
handler('registerAdapter', factory, (layer,), Interface, name, _context.info)

这意味着它将注册一个需要(layer,)并提供Interface的适配器,但调用以下代码不起作用(它返回一个不是浏览器资源的组件):

代码语言:javascript
复制
from zope.publisher.interfaces.browser import IDefaultBrowserLayer
zope.component.getAdapters((IDefaultBrowserLayer,), Interface)

我不确定,但似乎getAdapters需要一个实例。我不想查询zope.component,而是想获取已注册的适配器。

我在zope.interface.interfaces中发现了一个方法lookupAll(required, provided),它看起来就是我想要的,但是我找不到它的实现位置,所以我不知道如何调用它。

EN

回答 1

Stack Overflow用户

发布于 2013-08-13 21:33:46

zope.component.getAdapters()确实需要传递一个实例。zope.interface.registry.Components.getAdapters() method调用:

代码语言:javascript
复制
list(map(providedBy, objects))

其中providedByzope.interface.declarations.providedBy()IDefaultBrowserLayer所提供的全部功能是..zope.interface.IInterfacezope.interface.ISpecification

您需要传入一个提供IDefaultBrowserLayer的虚拟对象,而不是直接传入接口。

代码语言:javascript
复制
from zope.publisher.interfaces.browser import IDefaultBrowserLayer
import zope.component
import zope.interface

class dummy(object):
    zope.interface.classProvides(IDefaultBrowserLayer)

zope.component.getAdapters((dummy,), zope.interface.Interface)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18210148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档