他に、テンプレート内にJavaScriptを設定する方法がある。これについては以下順番に説明する。
- テンプレートのヘッダータグ内に、使用するJavaScriptライブラリーとユーザー定義外部ファイルを記述する。
設定例<script type="text/javascript" src="{{ MEDIA_URL }}js/jquery-1.4.2.js"></script> <script type="text/javascript" src="{{ MEDIA_URL }}js/main.js"></script>
設定例では JavaScriptライブラリとして jquery-1.4.2.js を、ユーザー定義外部ファイルとして main.js を指定している。
JavaScriptファイルの位置指定として、MEDIA_URL 変数を利用する。 - MEDIA_URL 変数を有効にするために settings.py にて設定を行う。
- MEDIA_URL の設定
メディアのURLを設定する。
設定例 設定例では ローカルホストに site_media/ を付けて指定している。
この時サーバー名以降のパス(/site_media/の部分)が、ADMIN_MEDIA_PREFIX 変数と同じだと ADMINの処理に優先されてしまい設定が動かなくなる。このため、重複しないようにする。 - MEDIA_ROOT の設定
MEDIA_ROOT変数にMEDIAを置くディレクトリーを設定する。
MEDIA_ROOT は MEDIA_URL変数の参照とは直接は関係無い。しかし静的ファイルの提供として次で設定する urls.py にて使用しているので取り敢えず設定する。
直接パスを設定しても良いが、プロジェクトやサーバーが変わった場合など、いちいち変更する必要があるため、次のように設定するのが良い。
設定例import os PROJECT_PATH = os.path.realpath(os.path.dirname(__file__)) MEDIA_ROOT = os.path.join(PROJECT_PATH, 'site_media')
PROJECT_PATH にはプロジェクトのパスを設定。MEDIA_ROOT にはプロジェクト・ディレクトリー下の site_media というディレクトリーが設定される。
(設定されるパス例 MEDIA_ROOT="C:\xxx\myprj\site_media")
なお、os.path を利用するためには、osパッケージをインポートする必要がある。
- MEDIA_URL の設定
- 静的ファイル提供の設定 (urls.py の設定)
Djangoでは静的ファイルの提供方法として、django.views.static.serve() ビューがある。しかしこれは、非効率的 かつ 安全ではない 。
Djangoドキュメント 静的なファイルの提供方法
Djangoドキュメント Apacheとmod_wsgi環境でDjangoを使う方法
開発中のみの利用を前提として、静的ファイル提供ためのDjango設定について以下説明する。
- urls.py の urlpatterns に MEDIA_URLで指定したパターンを追加する。
(ここでは site_media/ )
(r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes':True}),
パラメーター document_root に先ほど設定した MEDIA_ROOT を指定している。
またパラメーター show_indexes に True を指定しているがこの設定で、MEDIA_URL のアドレスでディレクトリーリストを表示することができる。 - 追加したurlパターン中に settings.MEDIA_ROOT を定義に使用している。このため、urls.py で settings.py をインポートする必要がある。
from django.conf import settings
- 上記2つの設定で静的ファイル提供の設定は完了する。しかし、urls.py の定義を開発・本番に使い分けるのは面倒なので、以下のように urls.py を記述すると良い。
from django.conf.urls.defaults import * from django.conf import settings urlpatterns = patterns('', (r'^admin/', include(admin.site.urls)), (r'^index/','myprj.myapp.views.index'), ) if settings.DEBUG: urlpatterns += patterns('', (r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes':True}), )
強調部分が今回の urls.py の設定箇所。
if setting.DEBUG の部分は開発中にしか動かない。
これは開発中は、settings.py 中で DEBUG=True と設定しているためだ。逆に本番環境では DEBUG=False と設定変更する必要がある。
- urls.py の urlpatterns に MEDIA_URLで指定したパターンを追加する。
以上で JavaScript 利用の設定は完了する。今回の設定では JavaScript ファイルは MEDIA_ROOT で指定したディレクトリー下に置けば良い。
ちょっと複雑だが一度設定すれば、簡単に JavaScript を活用することができる。