2012-11-29 33 views
0

我正在用sorl-thumbnail和许多远程图像(sorl从外部来源加载图像)运行django应用程序。检查sorl-thumbnail是否已经缓存了一张图片

理想情况下,我想检查一下sorl是否已经在我的模板中缓存了一个图像,如果没有,请使用ajax加载图像。

阅读中,我发现了一个exist方法,它似乎总是返回true

{% thumbnail item.image "160x200" crop="center" as im %} 
    {% if im.exists %} 
     <img src="{{ im.url }}"> 
    {% else %} 
     <!-- load image with ajax --> 
    {% endif %} 
{% endthumbnail %} 

有没有我可以用它来检查,如果一个图像已经在模板缓存的方法的文档?

+0

{%thumbnail item.image“160x200”crop =“center”as im%}创建缩略图(如果它不存在)。在下一行调用exists()将始终返回True,因为如果它不存在,它最近被创建。 – relekang

+0

这是有道理的。有没有创建缩略图对象而不创建实际图像的方法? 我可以在我的视图中查询kv商店。但是,这似乎有点哈克。 – Jannis

+0

可以通过使用sorl.thumbnail.base中的get_thumbnail中的一些代码来完成。我认为,如果你使用第32行到第50行,并且根据缓存变量返回True/False,就可以使用该函数。 – relekang

回答

0

我最终为我的模型使用了一种方法。

这是一些使用昂贵%LIKE%的脏原始sql。

def has_image_cached(self): 
     from django.db import connection 
     cursor = connection.cursor() 
     cursor.execute("SELECT * FROM thumbnail_kvstore WHERE value LIKE %s",['%'+self.imageurl+'%']) 
     row = cursor.fetchone() 
     if row is None: 
      return False 
     return True