Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

FlaskでCSSのキャッシュを効かせなくする方法

CSSを取得する際はHTTPのGETで取りに行きますので、URLが同じだとブラウザがキャッシュします。HTMLにアクセスしてブラウザがキャッシュするのと同じ。

ただ、CSSのように変更を即座に通知して欲しい場合にはこのキャッシュが邪魔になることがあります。キャッシュしないようにするには、クエリストリングをつける。

<link rel="stylesheet" type="text/css" href="/static/css/style.css?q=1422350253">

これをFlaskで実現するスニペットがこちら。blueprintの場合は@appデコレータとapp.root_pathをcurrent_app.root_pathに変えると動きます。

static url cache buster | Flask (A Python Microframework)

@app.context_processor
def override_url_for():
    return dict(url_for=dated_url_for)

def dated_url_for(endpoint, **values):
    if endpoint == 'static':
        filename = values.get('filename', None)
        if filename:
            file_path = os.path.join(app.root_path,
                                     endpoint, filename)
            values['q'] = int(os.stat(file_path).st_mtime)
    return url_for(endpoint, **values)