0

当用户在 Django 的 UpdateView 中上传图像时,我希望能够创建 3 种不同大小的图像。

我还希望能够将他们上传的文件重命名为 username_thumb_01.jpg、username_original_01.jpg、username_medium_01.jpg 之类的名称。

视图.py

class UserProfileEditView(UpdateView):
    model = UserProfile
    form_class = UserProfileForm
    template_name = "edit_profile.html"

表格.py

class UserProfileForm(forms.ModelForm):
    class Meta:
        model = UserProfile

模型.py

class UserProfile(models.Model):
    user = models.OneToOneField(User, unique=True)  
    website = models.URLField(null=True, blank=True)
    avatar = models.ImageField(upload_to="user-photos", null=True, blank=True) 

我尝试在我的 UserProfileEditView 中添加类似以下内容,但它没有用,我不确定我是否在正确的轨道上。

def form_valid(self, form):
    if self.request.files:
          filename= join(settings.MEDIA_ROOT, profile.avatar.name)
          im = Image.open(filename)
          im.thumbnail((160,160), Image.ANTIALIAS)
          im.save(imfn, "JPEG")
          form.save

有没有人这样做过?我怎样才能完成它?

4

2 回答 2

1

尽管他们的方法不同,但我建议使用sorl-thumbnail。不是在上传图像时创建图像,而是在需要时创建图像,然后使用您指定的任何缓存系统缓存它们。

于 2013-10-09T09:21:02.933 回答
0

我通过使用自定义图像字段来做到这一点。它的代码可在 github 上的https://github.com/hellsgate1001/django-thumbs上找到。

我没有创建它,我将它分叉以增加缩略图创建的灵活性,并确保它适用于 Django 1.5

于 2013-10-09T09:05:51.657 回答