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です。
参考
- 親分のエントリー
- 設置したMEDIAに何を置くのかの実例
