3

我需要创建一个包含基于敏捷的内容类型(Plone 4.2)的文件夹的批处理列表视图,该视图也显示了它们的图像。我找到了两种获取对象图像的方法。

方法一:

在模板中(批次内)

         ...
         <div tal:define="item_object item/getObject;">
              <img tal:condition="exists:item_object/@@images/image1"
                   tal:replace="structure item_object/@@images/image1/mini" />
         </div>

方法二:

在视图类中

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>

谁能告诉我哪种方式最好(如果有的话)不唤醒物体?

4

2 回答 2

2

我认为电流plone.app.imaging无论如何都需要唤醒对象以访问其图像比例(毕竟它们存储在对象内部)。所以生成对象的免唤醒列表并不是很容易。

好消息是 Dexterity 内容类型比 Archetypes 内容类型更轻量级,并且通过folder.contentItems()在模板中迭代来进行原始列表应该不会那么昂贵。事实上,它甚至可能比通过目录查询更快。所以不要担心唤醒对象,只需使用plone.app.imaging方法:

https://github.com/plone/plone.app.imaging

于 2013-02-07T19:55:48.433 回答
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>
于 2013-02-08T07:55:22.623 回答