烧瓶在哪里寻找图像文件?

时间:2015-01-29 05:46:51

标签: python file-upload flask web-development-server

我正在使用flask设置本地服务器。我目前要做的就是使用index.html页面中的img标签显示图像。但我一直在错误

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')

5 个答案:

答案 0 :(得分:51)

static目录中的图片文件是ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg吗?如果将其移动到静态目录并按此更新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路径进行硬编码。

答案 1 :(得分:13)

使用图像实际存在的绝对路径 (例如)'/ home /artitra/pictures/filename.jpg'

或在项目目录中创建静态文件夹,如下所示

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

然后这样做

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

然后您可以在 index.html

中访问您的图片
src ="/static/images/yourimage.jpg" 

in img tag

答案 2 :(得分:7)

来自documentation

  

动态Web应用程序还需要静态文件。那通常是在哪里   CSS和JavaScript文件来自。理想情况下您的Web服务器   配置为您服务,但在开发过程中Flask可以   也这样做。只需在您的包中创建一个名为static的文件夹或   在您的模块旁边,它将在/static上提供   应用

     

要生成静态文件的URL,请使用特殊的'static'端点   名:

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

该文件必须作为static/style.css存储在文件系统中。

答案 3 :(得分:2)

我花了一段时间来解决这个问题。 Flask中的url_for查找您在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中的路径端点,您的路径装饰器看起来像{{ 1}}。然后,您必须以这种方式询问您的图像文件: @blah.routes('/folder')

即。你告诉Flask去它知道的端点“文件夹”,   然后通过将子目录路径放在filename参数中来引导它。

答案 4 :(得分:-2)

为了在flask中导入图像,你需要一个名为static的子文件夹到文件夹中,保留你的img

进入你的html文件并写入