読者です 読者をやめる 読者になる 読者になる

DjangoテンプレートのstaticタグとSTATIC_URLコンテキスト変数の使い分け

Python Django

Djangoテンプレートで静的ファイルのパス指定時にdjango.contrib.staticfilesのstaticタグとSTATIC_URLのどちらを使うべきか、という質問があったので、少し調べました。この記事はDjango 1.8のドキュメントとコードを参考にしています。
結論としてはstaticタグを使ったほうが、テンプレートの再利用性は高いです。

STATIC_URLコンテキスト変数

STATIC_URLコンテキスト変数は、Djangoの設定ファイル(settings)に指定したSTATIC_URLがそのまま格納されています。
django/template/context_processors.py#L74
また、コンテキスト変数の参照を避けるのであれば、get_static_prefixタグを使ってSTATIC_URLの値を取得することもできます。

staticタグ

staticタグは、デフォルトのテンプレートタグではないので、使用する際にはloadタグによる指定が必要です。

{% load staticfiles %}

staticタグには、コンテキスト変数や文字列を指定できます。
また、staticタグの場合、STATIC_URLと直接結合するのではなく、ストレージクラスのurlメソッドを呼び出して、その結果が出力として使われます。
ストレージ側にURLの生成を任せる場合は、staticタグを使う必要があります。
django/contrib/staticfiles/templatetags/staticfiles.py#L9
settings.STATICFILES_STORAGEでストレージを変更することを想定するなら、STATIC_URLよりもstaticタグを使ったほうが良いようです。