【问题标题】:display PIL image object in django template在 django 模板中显示 PIL 图像对象
【发布时间】:2020-11-23 18:40:33
【问题描述】:

我已经使用 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}} + "'/>

提前致谢

【问题讨论】:

    标签: python django


    【解决方案1】:

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

    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 }}

    【讨论】:

      【解决方案2】:

      问题是:如何在 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}}"/>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-30
        • 1970-01-01
        • 1970-01-01
        • 2013-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多