Django webp 转换器标签static_webp不起作用



我在记录这里安装了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( 并将 Origanal 文件替换为新文件。

    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)
    

最新更新