在configure.zcml
我有:
<adapter name="getCountry" factory=".extender.country_indexer" />
在extender.py
我有:
@indexer(IATFile)
@indexer(IATImage)
@indexer(IProject)
@indexer(IATDocument)
def country_indexer(context):
return _country_indexer(context)
但是不对getCountry
索引下的所有类型进行编目。
如果我注释掉除了一个装饰器以外的所有装饰器,它适用于那种类型。
如何设置所有目录?
更多信息。只有一个注册使用适当的可调用进行调用。使用DelegatingIndexerFactory调用其他函数:
indexer.__init__ <plone.indexer.decorator.indexer instance at 0xafa6998> (<InterfaceClass Products.ATContentTypes.interfaces.file.IATFile>,)
indexer.__init__ <plone.indexer.decorator.indexer instance at 0xafa6f80> (<InterfaceClass Products.ATContentTypes.interfaces.image.IATImage>,)
indexer.__init__ <plone.indexer.decorator.indexer instance at 0xafa8050> (<InterfaceClass project.interfaces.project.IProject>,)
indexer.__init__ <plone.indexer.decorator.indexer instance at 0xafa8128> (<InterfaceClass Products.ATContentTypes.interfaces.document.IATDocument>,)
indexer.__call__ <plone.indexer.decorator.indexer instance at 0xafa8128> <function country_indexer at 0xafa76e0>
indexer.__call__ <plone.indexer.decorator.indexer instance at 0xafa8050> <plone.indexer.delegate.DelegatingIndexerFactory object at 0xafa5910>
indexer.__call__ <plone.indexer.decorator.indexer instance at 0xafa6f80> <plone.indexer.delegate.DelegatingIndexerFactory object at 0xafa5b90>
indexer.__call__ <plone.indexer.decorator.indexer instance at 0xafa6998> <plone.indexer.delegate.DelegatingIndexerFactory object at 0xafa5910>
答案 0 :(得分:1)
我担心@indexer
装饰器不支持链接。
有几种可能的解决方案:
使用单独的标记界面标记支持_country_indexer
的内容。
例如ICountry
?
这可以通过ZCML完成:
<class class="dotted.name.to.my.class">
<implements interface="dotted.name.to.ICountry" />
</class>
然后将此界面用于indexer
@indexer(ICountry)
def country_indexer(context):
return _country_indexer(context)
Interface
上注册并直接在方法中实现逻辑:@indexer(Interface)
def country_indexer(context):
SUPPORTED = [IATFile, IATImage, IProject, IATDocument]
...
@indexer(IATDocument)
def country_indexer_at_doc(context):
return _country_indexer(context)
@indexer(IATFile)
def country_indexer_at_file(context):
return _country_indexer(context)
@indexer(IATImage)
def country_indexer_at_img(context):
return _country_indexer(context)
...
zcml部分:
<adapter name="getCountry" factory=".extender.country_indexer_at_doc" />
<adapter name="getCountry" factory=".extender.country_indexer_at_file" />
<adapter name="getCountry" factory=".extender.country_indexer_at_img" />
...