0

コードは次のようになります。

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/ます。しかしcreate_thumbnail、画像をアップロードしてサムネイルを作成するときに、ビューまたはモデルからこの関数を呼び出す方法は?

4

2 に答える 2

0

これを行うには、django のデフォルトの save() メソッドをオーバーライドします。そのために、この save() 関数をモデル クラスの下に次のように定義します。

def save(self, *args, **kwargs):
    self.create_thumbnail()
    super(Document, self).save(*args, **kwargs)
于 2013-12-19T06:05:51.757 に答える
0

ビューで関数を呼び出したいということでしたか。それからあなたはすることができます

from urappname.models import Document

を使用して呼び出す

Document.create_thumbnail()
于 2013-02-22T09:39:04.390 に答える