sorl-thumbnail在刷新时提供不正确的URL

时间:2015-03-26 03:36:43

标签: python django upload image-uploading sorl-thumbnail

我试图在上传图片之前调整图片大小,然后将网址发送回json值。

这就是我的模型的样子:

class Picture(models.Model):
     picid = models.AutoField(null=False, unique=True, primary_key=True)
     user = models.ForeignKey(User, on_delete=models.CASCADE)
     large = ImageField(upload_to=Helper.createPhotoName)
     med = ImageField(upload_to=Helper.createPhotoName)
     small = ImageField(upload_to=Helper.createPhotoName)

def save(Self, *args, **kwargs):
     super(Picture, self).save(*args, **kwargs)
     self.med = get_thumbnail(self.large, '150x150', crop='center', quality=99)
     self.small = get_thumbnail(self.large, '80x80', crop='center', quality=99)

用户上传图片后,会将其保存到模型中,获取网址并将其发送回客户端。

   self.f = request.Files['file']
   usr = User.objects.get(pk=self.uid)
   pic = usr.picture_set.create(large=self.f, med=self.f, small=self.f)

   self.data['med'] = pic.med.url
   self.data['small'] = pic.small.url

之后,在另一个视图中,每当重新加载或重新访问页面以显示较旧的图像和更改它的选项时,始终会在数据库中查找已保存的图像。

  pic = Picture.objects.get(user=uid)
  self.data['photo'] = {
                      'small': pic.small.url,
                       'med': pic.med.url,
                      'silh': False
                     }

虽然我第一次获得正确的网址,但第二次我得到了错误的网址。我在upload_to路径中为每次上传获取了3张图片,在MEDIA_ROOT的缓存目录中获得了3张已调整大小的图片。在图片表upload_to中保存的路径不是缓存路径,而已调整大小的图像位于缓存目录中。

在thumbnail_kvstore表中,我可以看到调整大小的图像的路径为name dict键。刚上传后我得到了一个缓存的网址,但是在刷新后我得到了upload_to路径的网址,我无法获得调整大小的图片。可能是什么问题呢?

1 个答案:

答案 0 :(得分:1)

您应该在设置缩略图字段后调用save()

def save(Self, *args, **kwargs):
     self.med = get_thumbnail(self.large, '150x150', crop='center',
                                                            quality=99).name
     self.small = get_thumbnail(self.large, '80x80', crop='center',
                                                            quality=99).name
     super(Picture, self).save(*args, **kwargs)