web-dev-qa-db-ja.com

url_forを使用したFlask静的ファイルへのリンク

Flaskのurl_forを使用して、フォルダー内のファイルを参照するにはどうすればよいですか?たとえば、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を生成するにはどうすればよいですか?

75
user1431282

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

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

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

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

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

ファイルパスをstatic_folder/path/to/fileからURLパス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 documentation もご覧ください。

148
tbicr

私の場合、nginx設定ファイルに特別な指示がありました。

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

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

それが誰かを助けることを願っています。

0
Andrew Grow