| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

Django 静的ファイルを提供する

提供: MyMemoWiki
ナビゲーションに移動 検索に移動

Django 静的ファイルを提供する

Django | Python |

Django1.3以降

  • http://docs.djangoproject.jp/ja/latest/howto/static-files.html
  • 大きな プロジェクトで、特に複数のアプリケーションからなる場合は、各アプリケーションが 持っている静的ファイルの集まりを複数扱うことになり、ややこしくなってきます。
  • django.contrib.staticfiles はまさにそのためにあります。これは静的なファイ ルを各アプリケーションから (さらに指定した別の場所からも) 一つの場所に集め、運 用環境で公開しやすくするものです。

django.contrib.staticfiles を使う

staticfiles が見つけられる場所に静的ファイルを置く

  • デフォルトでは、 INSTALLED_APPS に入っているアプリケーションの static/ サブディレクトリ
  • INSTALLED_APPS に django.contrib.staticfiles が入っているこ とを確認
  • ローカル環境での開発 で runserver を使っているか、 staticfiles_urlpatterns を URLconf に追加し てあるなら、これでセットアップは終わりです。
  • ファイルをテンプレートで使いた場合、一番簡単な方法は コンテキストプロセッサを使うことです。次のようなテンプレートを書けます
<img src="{{ STATIC_URL }}images/hi.jpg" />

静的ファイルのデプロイについて

  • ローカル環境での開発が終わり、プロジェクトをデプロイする準備ができたら
STATIC_URL を静的なファイルを指すパブリックな URL に設定してくだ さい。 ( ほとんどの場合、デフォルト値である /static/ でうまく行きます )
STATIC_ROOT に、 collectstatic コマンドを使って静的な ファイルを集めたいファイルシステム上のパスを設定してください。
  • 例えば
STATIC_ROOT = "/home/jacob/projects/mysite.com/sitestatic"
collectstatic コマンドを実行
./manage.py collectstatic
STATIC_ROOT に含まれるファイルが STATIC_URL の場所で 公開されるように Web サーバを設定しデプロイ

以前の方法

基本方針

  • セキュリティ、およびパフォーマンスの理由から、Django の静的ファイル提供機能を利用することは推奨されない。
  • しかしながら開発時など、必要な場合は、以下の手順にて行う

手順

単純に

  • urlpatterns に以下のようなエントリーを追加
  • /webroot/static/ はファイルシステム上の実際のパス
urls.py
urlpatterns = patterns(,
          : 略
    (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': '/webroot/static/'}),
)

実際のパスを設定ファイルに記述

settings.py
STATIC_DOC_ROOT = '/webroot/static/'
urls.py
from django.conf import settings

urlpatterns = patterns(,
           : 略
    (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_DOC_ROOT}),
)

ディレクトリの内容を表示

  • show_indexes : True を追加
urls.py
urlpatterns = patterns(,
           : 略
    (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_DOC_ROOT, 'show_indexes': True}),
)

デバッグモードでのみ有効に

urls.py
urlpatterns = patterns(,
           : 略
)

if settings.DEBUG:
    urlpatterns += patterns(,
        (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_DOC_ROOT}),
    )