13

フラスコを使用して静的ファイルを提供しようとしています。url_for 関数の使い方がわかりません。動的コンテンツを生成するすべてのルートは正常に機能しています。url_for をインポートしましたが、次のコードがある場合:

@app.route('/')
def home():
    return url_for('static', filename='hi.html')

私の 'hi.html' ファイル (いくつかの基本的な html が含まれています) と共にディレクトリ static にあると、ページを読み込んだときに得られるものは文字通り次のとおりです。

/static/hi.html

url_for を間違って使用しているだけですか?

4

2 に答える 2

20

url_forそのファイルの URL を正確に返すだけです。redirectそのファイルの URL にアクセスしたいようです。代わりに、URL のテキストを応答としてクライアントに送信するだけです。

from flask import url_for, redirect

@app.route('/')
def home():
    return redirect(url_for('static', filename='hi.html'))
于 2013-04-08T16:14:56.380 に答える
8

あなたがしていることに対して正しい出力を得ています。 指定した引数のURL をurl_for生成します。あなたの場合、ディレクトリ内のファイルのURLを生成しています。実際にファイルを出力したい場合は、hi.htmlstatic

from flask import render_template, url_for

...

    return render_template(url_for("static", filename="hi.html"))

ただし、この時点では、静的ディレクトリは templates ディレクトリ (存在するように構成されている場所) の下にある必要があります。

このような静的な html ファイルを提供する場合/static/.*、Web サーバーから直接トラフィックをルーティングすることにより、flask アプリケーションの外部でそれらを提供することをお勧めします。nginx または apache を使用してこれを行うための例がウェブ上にたくさんあります。

于 2013-04-08T16:17:49.673 に答える