Где flask ищет файлы изображений?

Я настраиваю локальный сервер с помощью фляги. Все, что я хочу сейчас сделать, это отобразить изображение с помощью тега img на странице index.html. Но я продолжаю получать ошибку

GET http://localhost:5000/
ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg 404 (NOT FOUND)  

Где flask ищет файлы? Небольшая помощь была бы замечательной. Мой 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')

person Aritra Biswas    schedule 29.01.2015    source источник


Ответы (5)


Находится ли файл изображения 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-адреса для своих статических ресурсов.

person Matt Healy    schedule 29.01.2015
comment
Есть ли способ центрировать изображение, полученное таким образом? - person Nathan; 22.04.2018
comment
@frank да, просто отцентрируйте изображение, как обычно. Использование url_for здесь ничего не меняет - person Matt Healy; 23.04.2018
comment
Я использовал CSS, чтобы центрировать это. По какой-то причине он не был сосредоточен в плане HTML. Извините, здесь веб-новичок. Спасибо за быстрый ответ - person Nathan; 23.04.2018
comment
если я использую много изображений и сохраняю их в имени папки images, могу ли я назвать изображение с помощью 'static', filename'images / a.jpg '??? - person Berlian; 20.06.2021

используйте абсолютный путь, по которому изображение действительно существует (например, '/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

person Balaji    schedule 29.01.2015
comment
Я застрял в этой проблеме, когда пытался настроить свой Apache для обслуживания статических изображений, но почему-то это не сработало. С помощью этого решения я могу получать статические изображения. Спасибо - person fear_matrix; 12.07.2018
comment
Вы знаете, могу ли я использовать не только абсолютный путь? - person Elias Prado; 13.09.2019
comment
Это работает для каждого отдельного файла в каталоге. - person somenxavier; 24.01.2020
comment
В чем разница между static_folder и url_static_folder? - person somenxavier; 24.01.2020

Мне тоже потребовалось время, чтобы понять это. 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 в своей подпапке, НО не указали эту подпапку в качестве конечной точки маршрута в вашем флаконе routes.py, ваш декоратор маршрута выглядит как @blah.routes('/folder'). Затем вы должны запросить файл изображения следующим образом: {{ url_for('folder'), filename = 'subfolder/some_image.jpg' }}

I.E. вы говорите Flask перейти к известной ему конечной точке, «папке», а затем направляете ее оттуда, указав путь к подкаталогу в аргументе имени файла.

person pelon    schedule 18.03.2017

Из документации:

Динамическим веб-приложениям также нужны статические файлы. Обычно отсюда берутся файлы CSS и JavaScript. В идеале ваш веб-сервер настроен для их обслуживания, но во время разработки Flask тоже может это сделать. Просто создайте папку с именем static в вашем пакете или рядом с вашим модулем, и она будет доступна по адресу /static в приложении.

Чтобы сгенерировать URL-адреса для статических файлов, используйте специальное имя конечной точки 'static':

url_for('static', filename='style.css')

Файл должен храниться в файловой системе как static/style.css.

person Burhan Khalid    schedule 29.01.2015

для импорта изображения в колбу вам нужна подпапка с именем static в папке, сохраните ваш img

и войдите в свой html файл и напишите

person Sarvesh    schedule 22.01.2021