当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Django ImageField用法及代码示例


本文介绍 django.forms.ImageField 的用法。

声明

class ImageField(**kwargs)
  • 默认小部件: ClearableFileInput
  • 空值:None
  • 规范化为:UploadedFile 对象,将文件内容和文件名包装到单个对象中。
  • 验证文件数据是否已绑定到表单。还使用 FileExtensionValidator 来验证 Pillow 是否支持文件扩展名。
  • 错误消息键:requiredinvalidmissingemptyinvalid_image

使用ImageField 需要安装Pillow 并支持您使用的图像格式。如果您在上传图片时遇到 corrupt image 错误,通常表示 Pillow 不理解其格式。要解决此问题,请安装相应的库并重新安装 Pillow。

当您在表单上使用ImageField 时,您还必须记住将文件数据绑定到表单。

清理和验证字段后,UploadedFile 对象将有一个附加的 image 属性,其中包含用于检查文件是否为有效图像的 Pillow Image 实例。 Pillow 在验证图像后关闭底层文件说明符,因此虽然非图像数据属性(如 formatheightwidth )可用,但访问底层图像数据的方法,如 getdata()getpixel() ,如果不重新打开文件就无法使用。例如:

>>> from PIL import Image
>>> from django import forms
>>> from django.core.files.uploadedfile import SimpleUploadedFile
>>> class ImageForm(forms.Form):
...     img = forms.ImageField()
>>> file_data = {'img': SimpleUploadedFile('test.png', <file data>)}
>>> form = ImageForm({}, file_data)
# Pillow closes the underlying file descriptor.
>>> form.is_valid()
True
>>> image_field = form.cleaned_data['img']
>>> image_field.image
<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=191x287 at 0x7F5985045C18>
>>> image_field.image.width
191
>>> image_field.image.height
287
>>> image_field.image.format
'PNG'
>>> image_field.image.getdata()
# Raises AttributeError: 'NoneType' object has no attribute 'seek'.
>>> image = Image.open(image_field)
>>> image.getdata()
<ImagingCore object at 0x7f5984f874b0>

此外,如果 Pillow 可以确定,UploadedFile.content_type 将使用图像的内容类型进行更新,否则将设置为 None

相关用法


注:本文由纯净天空筛选整理自djangoproject.com大神的英文原创作品 django.forms.ImageField。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。