DjangoでCache Bustingの設定する
静的なファイル群(画像、CSS、JSなど)は、キャッシュ対策(Cache Busting)を行わないとブラウザ側でキャッシュされたファイルが上手く更新されず不具合のもととなってしまいます。
なので、今回は、Djangoで行うことができる二通りのキャッシュ対策を紹介致します。
方法1. ファイル名にハッシュを付加する
Djangoには、デフォルトでbase.e352ca3230fc.css
のようにファイル名にハッシュを付加する機能が備わっており、それを使うことでキャッシュ対策をすることができます。
設定方法
# settings.py
DEBUG = False
...
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'
<!-- base.html -->
{% load static %}
...
<link href="{% static 'css/style.css' %}" rel="stylesheet" type="text/css">
出力結果
<link href="/static/css/base.e352ca3230fc.css" rel="stylesheet" type="text/css">
方法2. クエリーにバージョンを付与する
django-static-md5urlを利用すれば、
のようにバージョンを付与することで、キャッシュ対策を行うことができます。base.css?v=e352ca3230fc
こちらは、ファイルの保存先自体が変わらないので、リンク切れが起きにくいです。
設定方法
$ pip install django-static-md5url
# setting.py
INSTALLED_APPS = [
...
'django_static_md5url',
]
<!-- base.html -->
{% load md5url %}
...
<link href="{% md5url 'css/style.css' %}" rel="stylesheet" type="text/css">
出力結果
<link href="/static/css/base.css?v=e352ca3230fc" rel="stylesheet" type="text/css">