首页 > 解决方案 > 在 django 模板中显示 PIL 图像对象

问题描述

我已经使用 PIL 库编辑了用户个人资料照片,并尝试在我的 django 模板中显示新图像,但不知何故图像没有显示,这是我在 views.py 中的代码:

enterim = Image.open(get_user_model().objects.get(username=request.user).avatar)
    width, height = im.size 
    newsize = (50, 50) 
    image = im.resize(newsize)
    buffer = BytesIO()
    image.save(buffer, "PNG")
    img_str = buffer.getvalue()
    
return render(request, '../templates/templates_v2/update_location.html', {'updatelocation_form': updatelocation_form,'user_info':user_info,'img_str':img_str}) 

这是 html 模板中的 img 标签:

<img src='data:image/png;"+ {{img_str}} + "'/>

提前致谢

标签: pythondjango

解决方案


您要做的是修改用户头像的大小,我使用信号从模型中执行此过程。例子:

from PIL import Image
from django.dispatch import receiver
from django.db.models.signals import post_save

class User(AbstractUser):
    avatar = models.ImageField(default='avatar.png', upload_to='users/')

这个简单的用户模型由什么组成,然后我执行用信号修改图像的过程。

@receiver(post_save, sender=User)
def set_avatar_user(sender, instance, *args, **kwargs):
    if instance.avatar:
        img = Image.open(instance.avatar.path)

        if img.width > 400 and img.height > 400:
            size = (400, 400)
            img.thumbnail(size)
            img.save(instance.avatar.path)

当你保存模型时,图像被修改为你分配的大小,并且从模板调用图像它将是 {{ request.user.avatar.url }}


推荐阅读