Невозможно отобразить изображение из STATIC_FOLDER в шаблоне Flask

Я устанавливаю папку для статических файлов, таких как

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

В шаблоне я использую тег img, чтобы показать изображение, сохраненное в /tmp:

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

В firebug я вижу ошибку 404 вместо изображения. Скажите, пожалуйста, что я сделал неправильно?

Спасибо заранее.

Ответ 1

Я не уверен, что это за элемент конфигурации STATIC_FOLDER, который вы используете. Где вы его нашли?

Фактически есть два аргумента конструктора класса Flask, которые определяют конфигурацию статических файлов:

  • static_folder: по умолчанию используется значение "static". Это префикс, который вы должны использовать в 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">

Обратите внимание, что вам все равно нужно иметь root /.

Но лучший способ сделать это - явно не ссылаться на пути изображения, а вместо этого использовать url_for для создания правильных URL-адресов. Если вы используете шаблоны Jinja2, которые будут:

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

Это последнее выражение будет работать независимо от того, где и как настроены статические файлы.