在django form-utils中使用django sorl-thumbnail
我该如何在 Django 的表单工具中实现 sorl 缩略图功能呢?
根据表单工具的文档,关于它的 ImageWidget 有这么一段话:
(只有在安装了 sorl-thumbnail 的情况下,缩略图才可用;否则将显示完整尺寸的图片)。
不过,我似乎无法实现这个功能。我尝试在模型中使用 sorl 的 ImageField,但这导致表单工具的 ImageWidget 出现问题,我在模板中使用时也搞不清楚,因为我在模板中只有这些内容:
<li class="field_upload">
{{ form.image.errors }}
<label for="id_image" class="top">{{ form.image.label }}</label>
{{ form.image }}
</li>
表单工具有一个选项是:
ImageWidget 接受一个关键字参数,叫做 template。这个参数是一个字符串,用来定义缩略图和文件输入控件之间的渲染方式。模板字符串应该包含变量插入标记 %(input)s 和 %(image)s。默认值是 %(input)s
%(image)s
在代码中看起来是这样的:
pic = forms.ImageField(
widget=ImageWidget(template='%(image)s<br />%(input)s'))
但我还是搞不明白。
1 个回答
1
看起来在你的表单类定义中,你把 ImageField
命名为 pic
,但是在你的模板中,你却试图用 form.image
来引用这个字段。
你可以先试着在模板中直接使用标准的 Django 表单渲染方法,把 {{form}}
放进去——如果这样能正常显示,那就说明问题出在你的模板上。
SORL 缩略图库只需要在你的 Django 项目的 Python 路径中可用(还有 Python 图像库)。
要检查这些库是否在你的 Django 项目中可用,可以去项目的根目录,然后运行...
$ python manage.py shell
>> import sorl.thumbnail
>> import PIL
如果这两个导入都没有抛出 ImportError
错误,那就说明它们安装得很好。
另外,可能还需要提供更多的代码,比如你在
forms.py
中定义的整个表单。