处理render_to_response中的图像缓存

时间:2011-06-22 06:28:57

标签: python django image qt

简要版本:

我希望将图片网址从render_to_response调用的输出中删除,并将其替换为本地缓存副本(如果它不存在则创建它)。我有一个实现的想法,但似乎每个人和他的妻子之前都这样做过,所以当我使用经过试验和测试的版本时,我不想浪费我的时间。

为什么:

我正在使用django为我的后端开发一个联合客户端(我打算制作一个浏览器版本,这样可以简化转换)。现在,对于我的客户端的移动版和桌面版,我希望能够离线查看供稿,例如长途旅行时。我想它实际上就像是Instapaper的供稿版本

我的解决方案:

我的数据库中有一个表,其中包含图像URL,最后更新时间和ImageField。目的是每当我遇到一个图像网址时,我会在这个表格中查找它(这将是主要索引)。

try:
  img = Image.objects.get(url=image_url)
except Image.DoesNotExist:
  img = Image(url=image_url, image=standard_placeholder)
  img.save()
if not img.last_updated or too_long_ago(img.last_updated):
  try:
    new_image = File(open(urllib.urlretreive())[0])
    img.image.save(md5(img.url),new_image)
    img.update()
  except:
    pass
return img.image

然后所有我要做的是将render_to_response中的图像替换为来自此处的图像。

我已经发现的问题:

我不完全确定我打算如何找到所有图片网址。 src对图像标记的争论应该很容易,并且应该覆盖大多数情况,但是有没有其他方法更加万无一失,而且漏洞少了一些?

3 个答案:

答案 0 :(得分:1)

如何创建custom template tag/filter来检查网址是否被缓存并决定使用哪个网址?

答案 1 :(得分:1)

由于您正在提供已爬网的html,因此您应该使用lxml之类的解析器对其进行过滤。在执行此操作时,您可以尝试查找img标记,获取图像并更改网址。我建议使用Celery作为离线任务。

答案 2 :(得分:1)

使用BeautifulSoup或HTMLParser之类的东西来解析文档并提取所有<img>代码并获取src属性。