Django 静的ファイルの配置

出典: UeblogWiki

目次

Tips

静的ファイル配置の考え方

DjangoはDjangoが担当するのは動的な部分だけで、静的ファイルに関しては別のサーバーを立てる方針になっています。

通常サーバーを分割するときに最初に静的ファイルを分けることが多いので最初から分けておこうという方針と思われます。

しかし、Djangoは大量のアクセスを簡単に裁くキャッシュ等の仕組みがあるので個人でDjangoサイトを作る場合には同じサーバー内に静的ファイルを置くようにしても大丈夫です。

Test環境での静的ファイル

Djangoの静的ファイルシステムを使う

Djangoにはdjango.views.static.serveという仕組みがあるのでそれを使います。

静的なファイルの提供方法 : Django オンラインドキュメント和訳

ドキュメントにあるようにsettings.pyでDebug=Trueの時だけ使うようにしましょう。

lighttpdなどの軽量サーバーを使う

lighttpdなどの軽量サーバーはunix系のPCでもWindowsでもインストールするのが簡単です。

こちらの静的ファイルの扱いを任せてしまえば urls.pyにif settings.Debug:をつかってdjango.views.static.serveを書く必要がなくなります。

この場合はテスト環境用のsettings.pyに

MEDIA_URL = 'http://127.0.0.1/static/' 

などのように設定してDjango RequestContextを使ってテンプレートから{{ MEDIA_URL }}で呼び出せるようにしましょう。

本環境での静的ファイル

どの方法でも#lighttpdなどの軽量サーバーを使うと同じようにDjango RequestContextを使ってテンプレートから{{ MEDIA_URL }}で呼び出せるようします。

別サーバーを配置する 

別サーバーを立てるときは他の方法と同じようにテンプレートから{{ MEDIA_URL }}で呼び出せるようにするだけです。

同じサーバーに設置する

mod_pythonの場合

mod_pythonの場合は該当の設定ファイルに静的ファイルを提供するディレクトリのハンドラをオフにする設定にします。

たとえばhttp://www.yourdomain.com/static/ に静的ファイルを置く場合は

<Location "/static/">
    SetHandler None
</Location>

のようにします。

fastcgiの場合

fastcgiの場合は該当の設定ファイルに静的ファイルを提供するディレクトリにrewriteをかけないように設定します。


たとえばhttp://www.yourdomain.com/static/ に静的ファイルを置く場合は

RewriteRule ^(static/.*)$ - [L]


管理サイトの静的ファイル

django/contrib/admin/mediaをディレクトリごと静的ファイルを提供するディレクトリにコピーすればOKです。

参考