我使用archetypes.schemaextender扩展ATEvent的模式以添加ImageField。
有效。
现在,我想将“tag”方法添加到ATEvent中,以便使用“新”缩放图像的方式。
所以我这样做: 在文件extender.py中:
from Products.CMFCore.permissions import View
from AccessControl import ClassSecurityInfo
from zope.interface import Interface
class IImageExtender(Interface):
""" """
def tag():
""" """
class ImageExtender(object):
""" """
implements(IImageExtender)
security = ClassSecurityInfo()
def __init__(self, context):
self.context = context
security.declareProtected(View, 'tag')
def tag(self, **kwargs):
"""Generate image tag using the api of the ImageField
"""
return self.getField('image').tag(self, **kwargs)
在configure.zcml之后:
<adapter for="Products.ATContentTypes.interface.IATEvent"
provides=".extender.IImageExtender"
factory=".extender.ImageExtender" />
但它不起作用。 我得到了这些错误:
Module zope.tales.pythonexpr, line 59, in __call__
- __traceback_info__: ( path('nocall:item_object/tag')(scale=size, css_class='tileImage'))
Module <string>, line 1, in <module>
Module zope.tales.pythonexpr, line 77, in __call__
Module zope.tales.expressions, line 217, in __call__
Module zope.tales.expressions, line 194, in _eval
Module zope.tales.expressions, line 217, in __call__
Module zope.tales.expressions, line 194, in _eval
Module zope.tales.expressions, line 124, in _eval
Module zope.pagetemplate.engine, line 66, in __call__
Module zope.traversing.adapters, line 136, in traversePathElement
- __traceback_info__: (<ATEvent at /Plone/manifestations/visites-conferences/conf>, 'tag')
Module zope.traversing.adapters, line 50, in traverse
- __traceback_info__: (<ATEvent at /Plone/manifestations/visites-conferences/conf>, 'tag', [])
LocationError: (<ATEvent at /Plone/manifestations/visites-conferences/conf>, 'tag')
任何线索? 感谢。
答案 0 :(得分:1)
我认为这里的问题是你试图在ATEvent上调用'tag' 对象,但该方法是在ATEvent对象的适配器上定义的。你需要能够调用IImageExtender(item).tag()
不幸的是,受限制的python阻止你直接在页面模板中执行此操作,因此最好的办法是为扩展的ATEvent创建一个BrowserView,以提供对适配器的访问。