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)存储文件。我的解决方案可能对那些正在开发新项目的人有用,因为我的方法不假定模型中以前保存的文件。
那么让我们按顺序开始吧。
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)并用新文件替换原始文件。
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)
我在记录的 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)存储文件。我的解决方案可能对那些正在开发新项目的人有用,因为我的方法不假定模型中以前保存的文件。
那么让我们按顺序开始吧。
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)并用新文件替换原始文件。
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)