Flask で CSS や JavaScript、画像などの静的ファイルを配信するには、static ディレクトリにファイルを配置する。デフォルトでは /static/ パスでアクセスできる。
ディレクトリ構成
プロジェクトのディレクトリ構成は以下のようになる。
static ディレクトリ以下のファイルは、そのまま /static/css/style.css などの URL でアクセスできる。
url_for による URL 生成
テンプレート内で静的ファイルを参照するときは url_for 関数を使う。
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}"> <script src="{{ url_for('static', filename='js/main.js') }}"></script> <img src="{{ url_for('static', filename='images/logo.png') }}" alt="Logo">
url_for('static', filename='...') とすると、Flask が適切な URL を生成する。パスをハードコードするより保守性が高い。
ルーティングでの url_for
url_for は静的ファイルだけでなく、ルーティングの URL 生成にも使える。
from flask import Flask, url_for, redirect
app = Flask(__name__)
@app.route('/')
def index():
return 'Index'
@app.route('/login')
def login():
return redirect(url_for('index'))
url_for('index') は関数名 index に対応する URL(この場合は /)を返す。URL を変更してもコードの修正箇所が減るため、リダイレクトやリンク生成には url_for を使うのが推奨される。