【问题标题】:Cannot show image from STATIC_FOLDER in Flask template无法在 Flask 模板中显示来自 STATIC_FOLDER 的图像
【发布时间】:2020-03-17 16:01:27
【问题描述】:

我为这样的静态文件设置文件夹

app.config['STATIC_FOLDER'] = 'tmp'

在模板中,我使用 img 标签来显示存储在 /tmp 中的图像:

<img src='IKE2low.jpg' width="200" height="85">

在萤火虫中,我看到 404 错误而不是图像。请告诉我我做错了什么?

提前致谢。

【问题讨论】:

  • 一点更新:现在我尝试将此文件放在我的主 py 文件旁边以及模板文件夹中 - img 标签仍然看不到图片。我想知道 - 它在哪里搜索图像???

标签: python flask


【解决方案1】:

我不确定您使用的这个STATIC_FOLDER 配置项是什么。你在哪里找到的?

Flask 类构造函数实际上有两个参数来控制静态文件的配置:

  • static_folder:默认为“静态”。这是您必须在 URL 中使用才能访问静态文件的前缀。

  • static_url_path:这是静态文件夹的磁盘位置。默认情况下,此值与 static_folder 设置相同。

例如,如果你使用这个配置:

from flask import Flask
app = Flask(__name__, static_url_path = "/tmp", static_folder = "tmp")

然后您可以按如下方式访问您的图像:

<img src='/tmp/IKE2low.jpg' width="200" height="85">

您也可以取消在 URL 中添加前缀的需要,如下所示:

from flask import Flask
app = Flask(__name__, static_url_path = "", static_folder = "tmp")

然后您可以通过以下方式访问您的图像:

<img src='/IKE2low.jpg' width="200" height="85">

请注意,您仍然需要有一个根 /

但最好的方法是不要显式引用图像路径,而是使用url_for 生成正确的 URL。如果您使用的是 Jinja2 模板:

<img src="{{ url_for('static', filename = 'IKE2low.jpg') }}" width="200" height="85">

无论静态文件的配置位置和方式如何,最后一个表达式都可以工作。

【讨论】:

  • 非常感谢!你的回答对我帮助很大!
  • Miguel,您是否可能交叉定义了 static_folder、static_url_path?我注意到稍后您使用 static_url_path 来引用该文本前面的资源 url。
猜你喜欢
  • 1970-01-01
  • 2021-05-18
  • 1970-01-01
  • 2011-11-17
  • 2012-05-15
  • 1970-01-01
  • 2020-08-20
  • 2015-12-17
  • 2023-03-31
相关资源
最近更新 更多