烧瓶api中的自定义静态路径?

时间:2017-04-24 07:59:18

标签: python templates flask

我在这里引用了这个链接:More than one static path in local Flask instance并试图在浏览器标签中显示图像文件,但是不能这样做。无法弄清楚错误。 stored_name是存储在app config常量变量指定的路径中的文件的物理文件名:' UPLOAD_FOLDER'。 此文件夹不在静态文件夹及其子文件夹路径中。我想增加文件的存储容量(也可能是图像文件),之后通过添加硬盘空间,如果我使用静态文件夹进行存储,这很难。我不想在应用初始化期间覆盖静态文件夹(有效)

代码段:

来自flask import send_from_directory

@app.route('/api/v1.0/docs/<path:filename>', methods=["GET"])
def img_render(filename):
    print 'Called here'
    return send_from_directory(app.config['UPLOAD_FOLDER'], filename)


@app.route('/api/v1.0/docs/<int:doc_id>',methods=["GET"])
def image_rendering(doc_id):
    s = select([docs]).where(docs.c.id==doc_id)
    rs = conn.execute(s).fetchone()
    filename = str(rs[docs.c.stored_name])

    return url_for('img_render', filename=filename)

Html模板:

<!DOCTYPE html>
<html>
  <body>
    <img src="{{url_for('img_render', filename=filename) }}" />
  </body>
</html>

模板位于模板文件夹中。如果我在初始化应用程序期间覆盖原始静态文件夹,我可以在浏览器中显示图像,但我必须更改我对应用程序的静态文件夹的引用我将拥有将图像上传到应用程序的静态文件夹中,我不想这样做。它只是在浏览器中显示图像路径的错误是什么? strong>示例:

  

/api/v1.0/docs/1_20160707_121214.jpg

而不是图像本身?代码中的错误在哪里?使用flask v .0.11,linux 2.7。

1 个答案:

答案 0 :(得分:1)

你的image_rendering方法返回一个字符串(这是你在浏览器中看到的),它应该返回模板渲染的结果。

将'mytemplate.html'替换为以下示例中的html模板名称。

from flask import render_template

@app.route('/api/v1.0/docs/<int:doc_id>',methods=["GET"])
def image_rendering(doc_id):
    s = select([docs]).where(docs.c.id==doc_id)
    rs = conn.execute(s).fetchone()
    filename = str(rs[docs.c.stored_name])

    return render_template('mytemplate.html', filename=filename)

这是一个适用于Windows的简单Flask应用程序。在我的d:\ temp文件夹中有一个文件test.jpg。确保您的Flask应用程序具有读取上载文件夹中文件的正确权限。要使用浏览到http://127.0.0.1:5000/api/v1.0/docs/99

from flask import Flask, send_from_directory, render_template

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'd:/temp'


@app.route('/')
def hello_world():
    return 'Hello World!'


@app.route('/api/v1.0/docs/<path:filename>', methods=["GET"])
def img_render(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'], filename=filename, mimetype='image/jpeg')


@app.route('/api/v1.0/docs/<int:doc_id>',methods=["GET"])
def image_rendering(doc_id):
    #  ignore doc_id, we'll use a constant filename
    filename = 'test.jpg'
    return render_template('test.html', filename=filename)


if __name__ == '__main__':
    app.run()

templates文件夹中的test.html:

<!DOCTYPE html>
<html>
  <body>
    <img src="{{url_for('img_render', filename=filename) }}" />
  </body>
</html>