我正在努力为Flask-Resize添加其他功能,特别是添加应该为原始文件提供服务的功能,而不是在大小和其他参数与原始文件相同时生成缓存文件。
我在检查中已经解决了所有问题,如果图像在RESIZE_ROOT
目录中,一切正常,但如果没有,当图像生成器检测到它不需要做任何事情时返回原始文件路径,jinja2似乎无法获取图像。
在test_img.jpg
目录中使用大小为200x300px的图像RESIZE_ROOT
可以正常工作:
<img src="{{ 'test_img.jpg'|resize('200') }}"></img>
输出:
http://127.0.0.1:5000/static/images/test_img.jpg
127.0.0.1 - - [23/Oct/2015 03:44:28] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [23/Oct/2015 03:44:28] "GET /static/css/main.css HTTP/1.1" 200 -
127.0.0.1 - - [23/Oct/2015 03:44:28] "GET /static/images/test_img.jpg HTTP/1.1" 200 -
-- test_img.jpg fetched and displayed correctly
然而,当图像移动到子目录ad/test_img.jpg
时,则控制台输出甚至不表示它正在获取图像
http://127.0.0.1:5000/static/images/ad/test_img.jpg
127.0.0.1 - - [23/Oct/2015 03:58:42] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [23/Oct/2015 03:58:42] "GET /static/css/main.css HTTP/1.1" 200 -
-- ad/test_img.jpg isn't even being fetched
使<a href="{ 'ad/test_img.jpg'|resize('200') }">image</a>
生成一个有效的图像链接,因此文件路径正确返回,所以我不知道发生了什么。
这是相关代码; generate_image
如果检测到它不应生成图片,则会引发exc.StopImageGeneration
异常。
if not os.path.exists(full_cache_path):
try:
generate_image(inpath=original_path, outpath=full_cache_path,
format=format, width=width, height=height,
bgcolor=bgcolor, upscale=upscale, fill=fill,
anchor=anchor, quality=quality,
progressive=progressive,
placeholder_reason=placeholder_reason,
force_cache=force_cache)
except exc.StopImageGeneration:
full_cache_url = unicode(resize_url+image_url)
print (full_cache_url)
return full_cache_url.replace('\\', '/')
我的Flask-Resize初始化参数如果重要:
(RESIZE_URL='http://127.0.0.1:5000/static/images/', RESIZE_ROOT='static/images/')
答案 0 :(得分:0)
事实证明这与Flask / Jinja2无关,这是Adblock的错;它静静地阻挡了图像。
我为localhost和127.0.0.1添加了一个例外后没有问题。