python - 在 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}} + "'/>
提前致谢
解决方案
您要做的是修改用户头像的大小,我使用信号从模型中执行此过程。例子:
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 }}
推荐阅读
- java - 从另一个 API 端点动态触发现有 Flux - Spring Webflux
- postgresql - 在所有 GRANT 之后 PostgreSQL 错误 42501(权限被拒绝)
- php - 如果存在日期,则返回计算日期
- javascript - 如何更改视频标签的转发时间
- c++ - 给定两个字符串 S 和 T。确定 S 的一个与 T 差最小的子串?
- unity3d - 示例场景未加载
- java - 从 jar 文件导入多个类对某些类有效,对其他类无效
- ruby-on-rails - Rails 6.0 ActiveStorage 直接上传:prod 中的请求 URL 错误,但 dev 中没有
- javascript - Stub es6 getter setter with sinon
- laravel - 如何在 API 中使用 laravel 进行调试