我需要使用基于敏捷的内容类型(Plone 4.2)创建一个文件夹的批量列表视图,该视图也会显示其图像。 我找到了两种获取物体图像的方法。
方法1:
在模板中(批处理内)
...
<div tal:define="item_object item/getObject;">
<img tal:condition="exists:item_object/@@images/image1"
tal:replace="structure item_object/@@images/image1/mini" />
</div>
方法2:
在视图类
中def get_item_image(self, item):
itemobj = item.getObject()
scales = getMultiAdapter((itemobj, self.request), name='images')
scale = scales.scale('image1', scale='mini')
imageTag = None
if scale is not None:
imageTag = scale.tag()
return imageTag
并在模板中
...
<div tal:define="item_image python:view.get_item_image(item)">
<img tal:condition="item_image"
tal:replace="structure item_image" />
</div>
任何人都可以告诉我哪种方式最好(如果有的话)不要唤醒物体?
答案 0 :(得分:2)
我认为当前plone.app.imaging
需要在任何情况下唤醒对象以访问其图像比例(毕竟它们存储在对象内)。因此,生成对象的无唤醒列表并不是一件容易的事。
好消息是,Dexterity内容类型比Archetypes内容类型更轻量级,并且通过在模板中迭代folder.contentItems()
来进行原始列表不应该那么昂贵。实际上,它甚至可能比通过目录查询更快。所以不要担心唤醒对象,只需使用plone.app.imaging
方法:
答案 1 :(得分:1)
您实际上必须唤醒对象并从架构对象中获取字段。
<tal:def tal:define="item_object python:item.getObject()">
<tal:if tal:condition="python:hasattr(item_object, 'Schema')">
<tal:d2 tal:define="image python:item_object.Schema().getField('image');
image python:image and image.getAccessor(item_object)();"
tal:condition="image">
<img id="image-rubrique" alt="" tal:attributes="src string:${item_object/absolute_url}/image_mini" />
</tal:d2>
</tal:if>
</tal:def>