【问题标题】:Where does flask look for image files?烧瓶在哪里寻找图像文件?
【发布时间】:2015-03-28 06:26:29
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案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 路径。

    【讨论】:

    • 有没有办法使以这种方式获取的图像居中?
    • @frank 是的,只需像往常一样将图像居中即可。在这里使用 url_for 不会改变任何东西
    • 我使用 CSS 将其居中。无论出于何种原因,它都没有以计划 HTML 为中心。对不起,这里是网络新手。感谢您的快速回复
    • 如果我使用了很多图像,并且我将它们存储到文件夹名称 images 中,我可以使用 'static' , filename'images/a.jpg' 来调用图像吗???
    【解决方案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标签中

    【讨论】:

    • 我陷入了这个问题,我试图将我的 Apache 配置为提供静态图像,但不知何故它不起作用。使用此解决方案,我可以获得静态图像。谢谢
    • 你知道我能不能只用绝对路径吗?
    • 这适用于目录中的每个单个文件。
    • static_folderurl_static_folder有什么区别?
    【解决方案3】:

    我也花了一段时间才弄清楚这一点。 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,您的路由装饰器看起来像 @blah.routes('/folder')。然后,您必须以这种方式询问您的图像文件: {{ url_for('folder'), filename = 'subfolder/some_image.jpg' }}

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

    【讨论】:

      【解决方案4】:

      来自documentation

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

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

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

      该文件必须以static/style.css 的形式存储在文件系统中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-17
        • 1970-01-01
        • 2010-09-25
        • 1970-01-01
        • 1970-01-01
        • 2010-09-25
        • 1970-01-01
        相关资源
        最近更新 更多