it-swarm.com.ru

Где 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')
42
Aritra Biswas

Файл изображения 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 __== '__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-путь для статических ресурсов.

53
Matt Healy

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

17
Balaji

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

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

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

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

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

7
Burhan Khalid

Мне тоже понадобилось время, чтобы понять это. url_for В Flask ищет конечные точки, которые вы указали в скрипте routes.py.

Так что если в вашем файле routes.py Есть декоратор, такой как @blah.route('/folder.subfolder'), тогда Flask распознает команду {{ url_for('folder.subfolder') , filename = "some_image.jpg" }}. The 'folder.subfolder' Отправляет его в конечную точку Flask, которую он распознает.

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

И.Е. Вы указываете Flask, чтобы перейти к известной конечной точке, "папке", а затем направить ее оттуда, указав путь к подкаталогу в аргументе имени файла.

3
pelon