我希望将图片网址从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对图像标记的争论应该很容易,并且应该覆盖大多数情况,但是有没有其他方法更加万无一失,而且漏洞少了一些?
答案 0 :(得分:1)
如何创建custom template tag/filter来检查网址是否被缓存并决定使用哪个网址?
答案 1 :(得分:1)
由于您正在提供已爬网的html,因此您应该使用lxml之类的解析器对其进行过滤。在执行此操作时,您可以尝试查找img标记,获取图像并更改网址。我建议使用Celery作为离线任务。
答案 2 :(得分:1)
使用BeautifulSoup或HTMLParser之类的东西来解析文档并提取所有<img>
代码并获取src
属性。