python - sorl-thumbnail 在刷新时给出错误的 url

标签 python django upload image-uploading sorl-thumbnail

我尝试在上传图像之前调整图像大小,然后将 url 作为 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)

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

   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

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

  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字典键。上传后,我得到了缓存的 url,但在刷新时,我得到了 upload_to 路径的 url,并且无法获取调整大小的图像。可能是什么问题呢?

最佳答案

您应该在缩略图字段设置之后调用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)

关于python - sorl-thumbnail 在刷新时给出错误的 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29270659/

相关文章:

python - matplotlib 接受不同颜色形式的问题

Python C API - 重新加载模块

python - 缓存随机删除的项目

ios - 在上传到服务器之前压缩视频和图像

python - 测试 pygame Sprite 碰撞

django - 在 Django 中上传的 csv 未保存

django - View 代码中的应用程序逻辑

python - Django文件上传: filename not sticking

javascript - PHP canvas图片上传到远程服务器

python - 防止 SQLAlchemy 对过期对象重新运行查询的正确方法?