Где фляжка ищет файлы изображений?
Я настраиваю локальный сервер, используя флягу. Все, что я хочу сделать в настоящее время, - это отображение изображения с помощью тега img на странице index.html. Но я продолжаю получать ошибку
GET http://localhost:5000/
ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg 404 (NOT FOUND)
Где фляжка ищет файлы? Маленькая помощь была бы большой. Мой HTML-код
<html>
<head>
</head>
<body>
<h1>Hi Lionel Messi</h1>
<img src= "ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg ">
</body>
</html>
Мой код python:
@app.route('/index', methods=['GET', 'POST'])
def lionel():
return app.send_static_file('index.html')
Ответы
Ответ 1
Является ли файл образа ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg в вашем static
каталоге? Если вы переместите его в свой статический каталог и обновите свой HTML как таковой:
<img src="/static/ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg">
Он должен работать.
Кроме того, стоит отметить, что есть лучший способ структурировать это.
Структура файла:
app.py
static
|----ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg
templates
|----index.html
app.py
from flask import Flask, render_template, url_for
app = Flask(__name__)
@app.route('/index', methods=['GET', 'POST'])
def lionel():
return render_template('index.html')
if __name__ == '__main__':
app.run()
Шаблоны /index.html
<html>
<head>
</head>
<body>
<h1>Hi Lionel Messi</h1>
<img src="{{url_for('static', filename='ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg')}}" />
</body>
</html>
Выполнение этого способа гарантирует, что вы не жестко кодируете URL-адрес для ваших статических активов.
Ответ 2
используйте абсолютный путь, где изображение действительно существует (например) '/home/artitra/pictures/filename.jpg'
или создать статическую папку внутри каталога проекта, например
| templates
- static/
- images/
- yourimagename.jpg
тогда сделайте это
app = Flask(__name__, static_url_path='/static')
то вы можете получить доступ к своему изображению, как это в index.html
src ="/static/images/yourimage.jpg"
в теге img
Ответ 3
Из документации:
Для динамических веб-приложений также требуются статические файлы. Обычно используется CSS и JavaScript файлы. В идеале ваш веб-сервер настроен для обслуживания их для вас, но во время разработки Flask может это сделать. Просто создайте папку с именем static
в вашем пакете или рядом с вашим модулем, и она будет доступна в /static
в приложении.
Чтобы создавать URL-адреса для статических файлов, используйте специальное 'static'
имя конечной точки:
url_for('static', filename='style.css')
Файл должен быть сохранен в файловой системе как static/style.css
.
Ответ 4
Мне понадобилось время, чтобы понять это. url_for
в Flask ищет конечные точки, которые вы указали в скрипте routes.py
.
Так что если у вас есть декоратор в файле routes.py
например @blah.route('/folder.subfolder')
тогда Flask будет распознавать команду {{ url_for('folder.subfolder'), filename = "some_image.jpg" }}
. 'folder.subfolder'
отправляет его в конечную точку Flask, которую он распознает.
Однако скажем, что вы сохранили свой файл изображения some_image.jpg
в своей some_image.jpg
, но не указали эту подпапку в качестве конечной точки маршрута в вашей routes.py
, ваш декоратор маршрутов выглядит как @blah.routes('/folder')
. Затем вы должны запросить свой файл изображения следующим образом: {{ url_for('folder'), filename = 'subfolder/some_image.jpg' }}
IE вы указываете Flask, чтобы перейти к конечной точке, которую он знает, "папке", а затем направьте ее туда, поместив путь подкаталога в аргумент filename.