Django 1.3で静的ファイルを提供する方法(開発環境)

djangoで静的ファイルを提供する際にはまったのでメモ書きをしておきます。

djangoはウェブサーバではないため本番環境ではApacheやNginxといったサーバソフトウェアに静的ファイルの配信を任せるべきです。

djangoのドキュメントにはDjango | Managing static files | Django documentationという項があり、複数の方法が紹介されています。

今回は最初に記載されているdjango.contrib.staticfilesを使用した方法を選択しました。
Django | The staticfiles app | Django documentation

staticディレクトリを作成する

appごとにstaticファイルを分けて保存することができます。(app名)/staticというディレクトリを作成しましょう。
(デフォルトでSTATICFILES_FINDERSにdjango.contrib.staticfiles.finders.AppDirectoriesFinderが追加されているため、自動的に探索をしてくれます。)

※特定のappに関連するファイルじゃない場合はSTATICFILES_DIRSにパスを指定することで、任意のディレクトリを認識させることができます。

appはちゃんとINSTALLED_APPSに追加しておきましょう。
追加しておかないとAppDirectoriesFinderが探索をしてくれません。

テンプレート

例えば、bootstrap.cssというCSSファイルをstaticディレクトリに配置した場合、

<link rel="stylesheet" href="bootstrap.css">

のように静的ファイルのパスを指定します。

が正常に動作するために注意べきすべき点がひとつあります。
テンプレートをレンダリングする際にRequestContextを利用するということです。
Django | The Django template language: For Python programmers | Django documentation

下記コードのようにcontext_instanceを指定するのを忘れずに。

def some_view(request):
    # ...
    return render_to_response('my_template.html',
                              my_data_dictionary,
                              context_instance=RequestContext(request))