gpt4 book ai didi

python - Django Imagekit 覆盖 cachefile_name?

转载 作者:太空宇宙 更新时间:2023-11-04 10:36:09 26 4
gpt4 key购买 nike

我正在尝试覆盖模块 django-imagekit 中的 cachefile_name 属性。

这是我的代码:

class Thumb150x150(ImageSpec):
processors = [ResizeToFill(150, 150)]
format = 'JPEG'
options = {'quality': 90}

@property
def cachefile_name(self):
# simplified for this example
return "bla/blub/test.jpg"

register.generator('blablub:thumb_150x150', Thumb150x150)

class Avatar(models.Model):
avatar= ProcessedImageField(upload_to=upload_to,
processors=[ConvertToRGBA()],
format='JPEG',
options={'quality': 60})
avatar_thumb = ImageSpecField(source='avatar',
id='blablub:thumb_150x150')

它根本不起作用。
当我调试时(没有覆盖cachefile_name),并查看cachefile_name的返回值,结果是一个字符串,如“CACHE/blablub/asdlkfjasd09fsaud0fj.jpg”。我的错误在哪里?

有什么想法吗?

最佳答案

尽我所能复制示例,它运行良好。一些建议是:

1) 确保您在 View 中使用 avatar_thumb。到那时才会生成文件“bla/blub/test.jpg”。

2) 检查 MEDIA_ROOT 的配置,确保您知道“bla/blub/test.jpg”应该出现在哪里。

让我举一个我正在做的类似事情的例子。我想给我的缩略图起一个可以从原始文件名中预测出来的唯一名称。 Imagekit 的默认方案根据哈希命名缩略图,我猜不到。而不是这个:

media/12345.jpg
media/CACHE/12345/abcde.jpg

我想要这个:

media/photos/original/12345.jpg
media/photos/thumbs/12345.jpg

覆盖 IMAGEKIT_SPEC_CACHEFILE_NAMER 不起作用,因为我不希望我所有的缓存文件最终都在“thumbs”目录中,只是那些从特定模型中的特定字段生成的文件。

所以我创建了这个 ImageSpec 子类并注册了它:

class ThumbnailSpec(ImageSpec):
processors=[Thumbnail(200, 200, Anchor.CENTER, crop=True, upscale=False)]
format='JPEG'
options={'quality': 90}

# put thumbnails into the "photos/thumbs" folder and
# name them the same as the source file
@property
def cachefile_name(self):
source_filename = getattr(self.source, 'name', None)
s = "photos/thumbs/" + source_filename
return s

register.generator('myapp:thumbnail', ThumbnailSpec)

然后像这样在我的模型中使用它:

# provide a unique name for each image file
def get_file_path(instance, filename):
ext = filename.split('.')[-1]
return "%s.%s" % (uuid.uuid4(), ext.lower())

# store the original images in the 'photos/original' directory
photoStorage = FileSystemStorage(
location=os.path.join(settings.MEDIA_ROOT, 'photos/original'),
base_url='/photos/original')

class Photo(models.Model):
image = models.ImageField(storage=photoStorage, upload_to=get_file_path)
thumb = ImageSpecField(
source='image',
id='myapp:thumbnail')

关于python - Django Imagekit 覆盖 cachefile_name?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23267950/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com