url_forを使用してFlask静的ファイルにリンクする


89

url_forフォルダー内のファイルを参照するためにFlaskでどのように使用しますか?たとえば、staticフォルダにいくつかの静的ファイルがあり、その一部はなどのサブフォルダにある場合がありますstatic/bootstrap

からファイルを提供しようとするとstatic/bootstrap、エラーが発生します。

 <link rel=stylesheet type=text/css href="{{ url_for('static/bootstrap', filename='bootstrap.min.css') }}">

これで、サブフォルダーにないファイルを参照できます。

 <link rel=stylesheet type=text/css href="{{ url_for('static', filename='bootstrap.min.css') }}">

静的ファイルを参照する正しい方法は何url_forですか?どのurl_forレベルで静的ファイルへのURLを生成するためにどのように使用しますか?

回答:


178

デフォルトでは、静的ファイルのstaticエンドポイントがあります。また、Flaskアプリケーションには次の引数があります。

static_url_path:Web上の静的ファイルに別のパスを指定するために使用できます。デフォルトはstatic_folderフォルダの名前です。

static_folder:で提供される静的ファイルのあるフォルダstatic_url_path。デフォルトは、アプリケーションのルートパスの「静的」フォルダーです。

これは、filename引数がファイルへの相対パスを取得して、static_folderと組み合わせた相対パスに変換することを意味しますstatic_url_default

url_for('static', filename='path/to/file')

ファイルパスをからstatic_folder/path/to/fileURLパスに変換しますstatic_url_default/path/to/file

したがって、static/bootstrapフォルダーからファイルを取得する場合は、次のコードを使用します。

<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='bootstrap/bootstrap.min.css') }}">

変換先(デフォルト設定を使用):

<link rel="stylesheet" type="text/css" href="static/bootstrap/bootstrap.min.css">

url_forドキュメントもご覧ください。


初期化時FlaskstaticエンドポイントのURLルールを追加するため、Flaskインスタンスでこれらの属性を変更してもurl_for('static', ...)結果は変更されないことに注意してください。初期化後に静的エンドポイントを変更するには、この要点を参照してくださいgist.github.com/brycepg/593ffb5ce9316d2871c7f24f9de34c24
ブライスギンタ

1

私の場合、nginx構成ファイルに特別な指示がありました:

location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
            try_files $uri =404;
    }

nginxはFlaskについて何も知らないため、すべてのクライアントは「404」を受け取りました。

誰かのお役に立てば幸いです。


私はWindowsを使用しています。このファイルはどこにありますか?url_forを使用して.jsファイルをロードしようとしていますが、機能しません。
ニコス

主な設定ファイルは/etc/nginx/nginx.conf(Linuxの場合)です。Windowsでも同様のパスになる可能性があります(実際にはわかりません)
Andrew Grow

これはサーバー側の設定です。デスクトップでアプリを開発しているだけの場合は、おそらく必要ありません。
adamczi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.