如何获取Dexterity内容类型的图像并在批量列表视图中显示?

时间:2013-02-07 10:46:30

标签: plone dexterity

我需要使用基于敏捷的内容类型(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>

任何人都可以告诉我哪种方式最好(如果有的话)不要唤醒物体?

2 个答案:

答案 0 :(得分:2)

我认为当前plone.app.imaging需要在任何情况下唤醒对象以访问其图像比例(毕竟它们存储在对象内)。因此,生成对象的无唤醒列表并不是一件容易的事。

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

https://github.com/plone/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>