Django webp 转换器标签 static_webp 不工作

Django webp converter tag static_webp not working

我在记录的 Here

安装了 webp_converter 包
{% load webp_converter %}

This is not working which I want to add static_webp
<img src="{% static_webp 'modelImage.url' %}">

This is working fine
<img src="{{ modelImage.url }}">

From Official Doc says
<img src="{% static_webp 'img/hello.jpg' %}">

我无法使用 {% static_webp 'modelImage.url' %} 自定义模板的输出。但是我能够在上传时转换文件并立即以所需的格式(webp)存储文件。我的解决方案可能对那些正在开发新项目的人有用,因为我的方法不假定模型中以前保存的文件。 那么让我们按顺序开始吧。

  1. models.py 在我的模型(目录)中,我通过调用函数 (rename_file) 覆盖了存储图像的路径。函数 (rename_file) 将我们文件的扩展重命名为 .webp,创建正确的 obj.url 。这必须立即完成。因为 obj.url 具有只读属性。

    from django.db import models
    from datetime import date
    
    image_path = os.path.abspath(settings.MEDIA_ROOT + '/photos/asics/' + date.today().strftime('%Y/%m/%d/'))
    
    def rename_file(instance, filename):
        if filename.find('.') >= 0:
            dot_index = (len(filename) - filename.rfind('.', 1)) * (-1)
            filename = filename[0:dot_index]
        filename = '{}.{}'.format(filename, 'webp')
        return os.path.join(image_path, filename)
    
    class Catalog(models.Model):
        photo = models.ImageField(upload_to=rename_file, blank=True)
    
  2. admin.py 图像通过管理面板添加到我的应用程序中。所以我决定把这个文件里的图片转换一下,不过没关系。这里我使用信号(post_save)调用函数(convert_image),它将图像转换为所需的格式(.webp)并用新文件替换原始文件。

     from django.contrib import admin
     from .models import Catalog
     from PIL import Image
     from django.db.models.signals import post_save
    
     @receiver(post_save, sender=Catalog)
     def convert_image(instance, **kwargs):
         if image_name:
             im = Image.open(image_name).convert('RGB')
             output_path = str(image_name)
             im.save(output_path, 'webp')
    
      class CatalogAdmin(admin.ModelAdmin):
          def save_model(self, request, obj, form, change):
              global image_name
              image_name = obj.photo
              super().save_model(request, obj, form, change)