[英]display PIL image object in django template
我已经用 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 }}
问题是:如何在 django 模板中显示 PIL 图像对象。
所以 :
from io import BytesIO
class html_view(APIView):
permission_classes = [AllowAny]
def get(self, request):
buffer_png = BytesIO()
qr.save(buffer_png, kind='PNG')
context = {
'img_str': base64.b64encode(buffer_png.getvalue()).decode('utf-8'),
}
return render(request, 'template.html', context=context)
在 template.html 中:
<img src="data:image/png;base64,{{img_str}}"/>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.