检查sorl缩略图是否已使用低级API缓存图像

时间:2013-12-21 21:12:15

标签: python django caching sorl-thumbnail

Sorl thumbnail有一个低级API,允许您这样做,例如:

from sorl.thumbnail import get_thumbnail
im = get_thumbnail(my_file, '100x100', crop='center', quality=99)

这将返回对缓存文件的引用。如果它已经被创建,那就超级快了。但是,如果必须首次创建它,则在使用S3等远程存储时可能需要很长时间。

有没有办法在Python中运行命令(即不在模板中)来检查sorl是否必须首次生成缩略图?

PS。我知道类似的问题here,但这是在模板上下文中询问它,并且有一个hacky解决方案作为使用自定义SQL而不是sorl API的答案。

1 个答案:

答案 0 :(得分:1)

在我的sorl.thumbnail 11.12版本中,方法get_thumbnail在sorl.thumbnail.base.py中定义,并按如下方式开始:

def get_thumbnail(self, file_, geometry_string, **options):
    """..."""
    source = ImageFile(file_)
    for key, value in self.default_options.iteritems():
        options.setdefault(key, value)
    # ...
    for key, attr in self.extra_options:
        value = getattr(settings, attr)
        if value != getattr(default_settings, attr):
            options.setdefault(key, value)
    name = self._get_thumbnail_filename(source, geometry_string, options)
    thumbnail = ImageFile(name, default.storage)
    cached = default.kvstore.get(thumbnail)
    if cached:
        return cached
    if not thumbnail.exists():
        ...

如果您使用此代码并返回类似

的内容
cached or thumbnail.exists()

这应该会给你想要的结果。