在django form-utils中使用django sorl-thumbnail

2 投票
1 回答
1163 浏览
提问于 2025-04-16 20:38

我该如何在 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 中定义的整个表单。

撰写回答