Python 在django中创建缩略图时出现问题
代码如下:Python 在django中创建缩略图时出现问题,python,django,Python,Django,代码如下: class Document(models.Model): docfile = models.FileField(upload_to='documents/big/') thumbnail = models.FileField(upload_to='documents/small/') def create_thumbnail(self): if not self.image: return
class Document(models.Model):
docfile = models.FileField(upload_to='documents/big/')
thumbnail = models.FileField(upload_to='documents/small/')
def create_thumbnail(self):
if not self.image:
return
from PIL import Image
from cStringIO import StringIO
from django.core.files.uploadedfile import SimpleUploadedFile
import os
THUMBNAIL_SIZE = (200,200)
DJANGO_TYPE = self.image.file.content_type
if DJANGO_TYPE == 'image/jpeg':
PIL_TYPE = 'jpeg'
FILE_EXTENSION = 'jpg'
elif DJANGO_TYPE == 'image/png':
PIL_TYPE = 'png'
FILE_EXTENSION = 'png'
image = Image.open(StringIO(self.image.read()))
image.thumbnail(THUMBNAIL_SIZE, Image.ANTIALIAS)
temp_handle = StringIO()
image.save(temp_handle, PIL_TYPE)
temp_handle.seek(0)
suf = SimpleUploadedFile(os.path.split(self.image.name)[-1],
temp_handle.read(), content_type=DJANGO_TYPE)
self.thumbnail.save('%s_thumbnail.%s'%(os.path.splitext(suf.name)[0],FILE_EXTENSION), suf, save=False)
def save(self):
self.create_thumbnail()
super(ImageWithThumbnail, self).save()
现在我想将缩略图保存在
documents/small/
中。但是,在上载图像以创建缩略图时,如何从视图或模型调用该函数?您的意思是要在视图中调用该函数吗。
那你就可以了
from urappname.models import Document
并使用
Document.create_thumbnail()
可以通过重写django的默认save()方法来实现这一点。 为此,请在模型类下定义此save()函数,如下所示:
def save(self, *args, **kwargs):
self.create_thumbnail()
super(Document, self).save(*args, **kwargs)
实际上,我想在上传图像时动态创建缩略图。在我的查看页面中,我将数据保存在数据库中,如下所示:newdoc=Document(docfile=request.FILES['docfile'],缩略图=request.FILES['docfile'])newdoc.save()