烧瓶不提供图片

Posted

技术标签:

【中文标题】烧瓶不提供图片【英文标题】:Flask not serving pictures 【发布时间】:2012-07-20 18:12:51 【问题描述】:

我创建了一个小型 Flask 应用程序,用于在本地计算机上处​​理和呈现数据以供本地使用。 My Flask 应用程序处理子文件夹中的数据,然后打开网页以显示处理后的数据。一切看起来都很棒,只是没有提供图像。例如,生成的 html 源将具有以下内容:

<img src="/Users/username/Desktop/datafolder/pics/pic1.png" > 

但是不会有图像。路径是正确的,所以我猜这与图像如何通过或不通过render_template 中的 Flask 有关。也许有一种方法可以指定媒体目录,正如我在这个django post 中看到的那样?

非常欢迎任何关于我如何能够包含图像的建议。

最好的问候, 扎克cp

编辑:正如答案和 cmets 中提到的,所有静态文件都必须在指定的静态目录中。我对“file://”结构的使用触发了浏览器给出错误消息: "Not allowed to load local resource: file:///Users/username/Desktop/datafolder/pics/pic1.png" 这就是为什么我看不到图像的原因。我可以使用下面的任何解决方案来生成我希望在指定静态文件夹中提供的图像。

【问题讨论】:

看看这个:flask.pocoo.org/docs/quickstart/#static-files 我不知道这是否可行,或者您是否已经尝试过,但是如果您让模板将 file:// 添加到 img src 会发生什么? -mathew brown 我尝试了“file://”技巧,但没有奏效 -gohn67 我看到了该文档,但没有将我的图片移动到静态目录我不知道该怎么做.我想有一种方法可以指定媒体目录,但我想将我的文件保存在它们所在的位置。 只是指出这一点:如果你使用了file:// URL,你需要确保路径是正确的,并且路径是区分大小写的。例如,用户中的大写 U? 【参考方案1】:

Flask 应用程序将尝试提供静态文件的文件默认为应用程序根目录中的“静态”路径。因此,如果您在...中运行您的程序

C:\Users\username\Desktop\MyApp

静态文件夹将是

C:\Users\username\Desktop\MyApp\Static

因此,当尝试发球时

/Users/username/Desktop/datafolder/pics/pic1.png

Flask 将尝试提供的文件实际上是...

C:\Users\username\Desktop\MyApp\Static\Users\username\Desktop\datafolder\pics\pic1.png

这可能不对。

因此,您可以做几件事:

    将正在处理的文件更改为运行 Flask 应用程序的“静态”文件夹,并使 HTML src 值相对于该目录

    在Flask constructor 上设置static_folder 参数。这允许您专门设置静态文件的提供位置。

    app = Flask(static_folder='C:\\Some\\Directory')
    

    正如一些 cmets 所建议的,更改为使用 file:// 类型。如果它不起作用,请发布您正在尝试的内容,因为它应该可以工作:)

【讨论】:

感谢马克写出来。实际上,我一直将 Flask 应用程序保存在与我的数据完全不同的目录中。但是我的解决方案是使用 Frozen_Flask 扩展,它将在服务之前将所有内容复制到静态文件夹。谢谢! 我在 Linux 上工作,我必须将 Static 更改为 static(区分大小写)才能正常工作。 添加 / 是在依赖临时令牌的 html 页面上查找图像文件的关键。 Post 命令与令牌相关联,而不是与任何具有明确目录路径的特定页面相关联。【参考方案2】:

好吧,你最好看看这个:http://flask.pocoo.org/docs/quickstart/#static-files 你需要做什么:

cd path/to/your/flask/app
mkdir static
mv /Users/username/Desktop/datafolder/pics/pic1.png /static

在您的模板中使用&lt;img src="/static/pic1.png" alt="pic1"&gt;

【讨论】:

感谢 whtsky。我最终使用了frozen_flask 扩展,它基本上可以做同样的事情。【参考方案3】:

Flask 应用程序将尝试提供静态文件的文件默认为应用程序根目录中的“静态”路径。

创建静态文件夹并将图像粘贴到其中并提供路径为 \Static\Img.png

【讨论】:

以上是关于烧瓶不提供图片的主要内容,如果未能解决你的问题,请参考以下文章

如何在烧瓶响应中返回图像? [复制]

Heroku 不提供背景图片,localhost 可以吗?

如何使用烧瓶安全保护烧瓶管理面板

不需要爬虫也能轻松获取 unsplash 上的图片

不需要爬虫也能轻松获取 unsplash 上的图片

快速入门开发实现订单类图片识别结果抽象解析