我已为不同的内容类型创建并注册了不同的视图。它们正常工作,但仅适用于Image和File以外的内容类型。我无法使视图可用于图像内容类型。
图像根本没有布局菜单。尽管如此,观看次数仍显示在/Plone/portal_view_customizations
:
Products.ATContentTypes.content.document.ATDocument
about-view (zope.publisher.interfaces.browser.IDefaultBrowserLayer)
Products.ATContentTypes.content.image.ATImage
camera-view (zope.publisher.interfaces.browser.IDefaultBrowserLayer)
但getAvailableLayouts
返回图像的空列表和文档的非空列表:
>>> image.getAvailableLayouts()
[]
>>> image.getTypeInfo().getAvailableViewMethods(image)
('image_view', 'camera-view')
>>> page.getAvailableLayouts()
[('about-view')]
>>> page.getTypeInfo().getAvailableViewMethods(page)
('document_view', 'about-view')
getAvailableLayouts()
中的Products.CMFDynamicViewFTI-4.0.5-py2.7.egg/Products/CMFDynamicViewFTI/browserdefault.py
中的以下调用返回无
view = zope.component.queryMultiAdapter((self, self.REQUEST),
zope.interface.Interface,
name='image_view')
任何提示如何注册图像和文件的视图?
我的所有观点的编码都类似,并在此处复制(文档和图像的示例):
在/browser/configure.zcml
<browser:page
for="Products.ATContentTypes.content.image.ATImage"
name="camera-view"
class=".camera_view.CameraView"
permission="zope2.View"
template="camera_view.pt"
/>
<browser:page
for="Products.ATContentTypes.content.document.ATDocument"
name="about-view"
class=".about_view.AboutView"
permission="zope2.View"
template="about_view.pt"
/>
在/browser/about_view.py
from Products.Five import BrowserView
class AboutView(BrowserView):
""" """
在/profiles/default/types/Document.xml
<object name="Document">
<property name="view_methods" purge="False">
<element value="about-view"/>
</property>
</object>
在/browser/camera_view.py
from Products.Five import BrowserView
class CameraView(BrowserView):
""" """
在/profiles/default/types/Image.xml
<object name="Image">
<property name="view_methods" purge="False">
<element value="camera-view"/>
</property>
</object>
在/profiles/default/types.xml
<object name="portal_types" meta_type="Plone Types Tool">
<object name="Document" meta_type="Factory-based Type Information with dynamic views"/>
<object name="Image" meta_type="Factory-based Type Information with dynamic views"/>
</object>
答案 0 :(得分:4)
在Plone 4中,图像(和文件)是基于blob的,实际上是来自plone.app.blob的ATBlob实例,而不是ATImage。
您应该为plone.app.blob.interfaces.IATBlobImage接口注册视图,该接口用作图像blob上的标记,而不是ATImage类。