使用Django的ImageField上传图片,重命名为随机文件名并生成缩略图

0 投票
1 回答
2200 浏览
提问于 2025-04-15 19:09

大家好,我写了一个简单的上传图片的方法。

class Picture(models.Model):
    path = models.CharField(max_length=200)
    filename = models.CharField(max_length=200)
    car = models.ForeignKey('Car')
    thumb_path = models.CharField(max_length=200)
    created_on = models.DateField(auto_now_add=True)
    updated_on = models.DateField(auto_now=True)

    def save(self):
        if not self.id:
            thumb_size = 128, 128
            thumb_path = "assests/uploads/thumb"+self.filename
            t = Image.open(self.path)
            t.thumbnail(thumb_size,Image.ANTIALIAS)
            t.save(thumb_path, "JPEG")
        self.thumb_path = thumb_path
        super(Picture, self).save()

    def delete(self):
        os.unlink(self.thumb_path)
        os.unlink(self.path)
        super(Picture, self).delete()

如你所见,这个方法并不是最好的。我想使用ImageField()来完成大部分工作,但我仍然希望能够灵活地创建缩略图和随机文件名。

我需要为PictureThumbnail创建另一个模型吗?我其实不太想使用任何第三方的扩展。

我该如何使用ImageField来实现这个功能呢?所有的图片都会上传到/assests/uploads/这个路径下。

谢谢!

1 个回答

1

你可以使用一个改编过的版本:

http://www.djangosnippets.org/snippets/1100/

或者,根据你具体想要做的事情,你可以考虑使用模板过滤器的方法,像这样:

http://www.djangosnippets.org/snippets/1887/

撰写回答