當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。