9
from flask import Flask, redirect, url_for

app = Flask(__name__)
@app.route('/')
def index():
        generate_img("test.jpg");
        return '<img src=' + url_for(filename='test.jpg') + '>'

generate_img()将随机图像输出到当前目录(与此脚本相同的文件夹)。

我收到 404,我导航到 mydomain.com/test.jpg 但它不存在。

4

2 回答 2

8

404 错误的原因是没有这样的视图来处理这个问题。要从烧瓶中提供图像,请将图像保存在静态文件夹中,然后您可以在此 url 访问图像

mydomain.com/static/test.jpg

     from flask import Flask, redirect, url_for

     app = Flask(__name__)
     @app.route('/')
     def index():
          generate_img("test.jpg"); #save inside static folder
          return '<img src=' + url_for('static',filename='test.jpg') + '>' 

静态文件夹用于提供所有媒体,无论是 css、javascript、视频或图像文件,所有内容均可在 mydomai.com/static/filename 访问。请记住,您不应该在生产中使用来自静态文件夹的烧瓶服务。此功能仅用于开发。

于 2012-08-20T11:20:14.407 回答
7

假设实际生成了图片(即调用了那个index()),404的原因是没有指向图片的路由,所以Flask会告诉你没有mydomain.com/test.jpg . 默认情况下,像 Apache 或 Nginx 这样的静态网络服务器会将路径从根映射到 URL,但普通的 Flask/Werkzeug/WSGI 设置不会这样做。

也许您想创建一个直接返回图像的资源?

编辑:类似的东西应该能够提供图像。

@app.route("/imgs/<path:path>")
def images(path):
    generate_img(path)
    fullpath = "./imgs/" + path
    resp = flask.make_response(open(fullpath).read())
    resp.content_type = "image/jpeg"
    return resp

EDIT2:当然, generate_img 可能会被重写,因此它永远不会写入磁盘,而是直接返回图像数据。

于 2012-08-20T09:17:07.490 回答