我的plone页面模板中有以下代码:
<img
tal:define="folderimagetitle python:context.getField('folderimagetitle').getAccessor(context)()"
tal:condition="folderimagetitle"
src=""
alt=""
tal:replace="structure python:context.getWrappedField('folderimage').tag(context, alt=folderimagetitle, css_class='photo')"
/>
基本上我想在H1标签旁边显示图像。图像将工作并显示正常,但它将显示与文本不对齐的完整图像大小。我也不想只添加高度和宽度属性,因为这会导致图像边缘不整齐,但不能很好地缩放。
如何将其缩小为Plone中可用的默认尺寸之一,即列表,图标,图块,拇指,迷你,预览和大图?
答案 0 :(得分:5)
“现代”方式是使用plone.app.imaging。
实施例
<img tal:define="scales context/@@images;
thumbnail python: scales.scale('image', width=64, height=64);"
tal:condition="thumbnail"
tal:attributes="src thumbnail/url;
width thumbnail/width;
height thumbnail/height" />
答案 1 :(得分:5)
接受的答案非常完美,但这里有一个额外的暗示:
/ @@ images上下文对任何对象类型都是可获取的,但scales.scale()的第一个参数是一个必须在该上下文中使用.getField(name)获取的字段名。
因此,例如,如果您有一个图库视图,可以在视图/图像上显示图像列表,您可以使用:
<li tal:repeat="image view/images">
<img tal:define="scales image/@@images;
img python: scales.scale('image', width=100, height=100);"
tal:attributes="src img/url">
</li>
请特别注意,您无法将图像实例传递为:
scales context/@@images; <--- Don't do this. You need the @@images for an Image
scales.scale(instance, width=10, height=10);
如果由于某种原因你需要使用其他语言而不是TAL,那么诀窍是使用restrictedTraverse()来获取&#39; @@ images&#39;上下文,如:
%if request.context.children.has(0, 'ATBlob'):
<%
# NB. The 'ATBlob' is the concrete Image instance
image = request.context.children.nth(0, 'ATBlob')
scales = image.restrictedTraverse('@@images')
scaled_image = scales.scale('image', width=100, height=100)
%>
${scaled_image}
%endif