Как получить изображение типов контента 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 метод:

https://github.com/plone/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>
Другие вопросы по тегам