我在记录这里安装了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( 存储文件。我的解决方案可能对正在开发新项目的用户有用,因为我的方法不假定模型中以前保存的文件。 因此,让我们按顺序开始。
-
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)
-
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)