Как получить изображение типов контента Dexterity и показать в виде списка в виде списка?
Мне нужно создать пакетное представление списка для папки с типами контента на основе 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 ответа
Я думаю, что текущий plone.app.imaging
в любом случае необходимо разбудить объект, чтобы получить доступ к его масштабам изображения (в конце концов, они хранятся внутри объекта). Так что не так просто сгенерировать список объектов без пробуждения.
Хорошая новость заключается в том, что типы контента Dexterity более легкие, чем типы контента Archetypes, и делают необработанный листинг путем итерации. folder.contentItems()
в вашем шаблоне не должно быть так дорого. На самом деле, это может быть даже быстрее, чем через запрос каталога. Так что не беспокойтесь о пробуждении объектов и просто используйте plone.app.imaging
метод:
Вы фактически должны пробудить объект и получить поле от объекта схемы.
<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>