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 などの静的 Web サーバーは、デフォルトでルートから 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 に答える