2015-01-29 4 views
12

Я настраиваю локальный сервер, используя флягу. Все, что я хочу сделать в настоящее время, - это отображение изображения с помощью тега 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> 

Мой питон код:

@app.route('/index', methods=['GET', 'POST']) 
def lionel(): 
    return app.send_static_file('index.html') 
+1

Прочитайте [документацию] (http://flask.pocoo.org/docs/0.10/quickstart/#static-files) –

ответ

17

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

5

Из documentation:

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

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

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

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

3

использование абсолютного пути, где изображение фактически существует (например,) '/ home/artitra/images/filename.JPG»

или создать статическую папку в директории вашего проекта, как этот

| templates 
    - static/ 
     - images/ 
       - yourimagename.jpg 

затем сделать это

app = Flask(__name__, static_url_path='/static') 

, то вы можете получить доступ к изображению, как это в index.html

src ="/static/images/yourimage.jpg" 

in img tag

1

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

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

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

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

Смежные вопросы