【Django】static ファイルの配置と設定

プロジェクト単位かアプリケーション単位かで若干ファイルの配置場所と設定方法が違いますが、まずは settings.py の INSTALLED_APPS に「'django.contrib.staticfiles'」の記述があることを確認します。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles', # この記述があることを確認

    'sample_django_app.apps.SampleDjangoAppConfig'
]

プロジェクト単位で使う static の場合

プロジェクトフォルダ(manage.py がある階層)に「static」フォルダを作成し、ファイルを配置。

settings.py の「STATICFILES_DIRS」にフルパスを追加することで、Django が静的ファイルを検索する際の検索対象となります。

collectstatic コマンド実行時のファイル取得元にもなります。

STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static'),
]

アプリケーション単位で使う static の場合

アプリケーションフォルダ直下に「static/アプリケーション名」のフォルダを作成し、ファイルを配置。

settings.py に「STATIC_URL = '/static/'」の記述があることを確認。

STATIC_URL = '/static/'

参考情報

項目メモ
STATICFILES_DIRScollectstatic が静的ファイルを追加検索する対象のディレクトリ(特定のアプリケーションに属さないものが対象)
STATIC_ROOTcollectstatic 実行時に静的ファイルの集約先となるディレクトリ。下記STATIC_URL の参照先。
STATIC_URL公式ドキュメントには "URL to use when referring to static files located in STATIC_ROOT."(STATIC_ROOT にある静的ファイルを参照する時に使う URL)とあるので、「STATIC_ROOT を表向きの URL としては何と表すか」という事だと理解しています。
参照:Django Documentation - Static Files

また、Django プロジェクト内の静的ファイルを探索するファイルファインダーと呼ばれる仕組みがあり、デフォルトでは下記2つが有効になっています。

  • FileSystemFinder - STATICFILES_DIRS で指定されたディレクトリを探索する
  • AppDirectoriesFinder - アプリケーションレベルの static ディレクトリを探索する

忘備録

アプリケーションレベルの static フォルダを作る際、お作法として直下にアプリケーション名のフォルダを作ってその中に静的ファイルを入れます。

例えば、「app_dir」というアプリケーションに対して「/js/app_script.js」というファイルを作る場合、「app_dir/static/app_name/js/app_script.js」となります。

本番環境で collectstatic コマンドを実行する際、下記の様に static ファイルがコピーされます。

そして、テンプレート上でアプリケーションレベルの静的ファイルを指定する時には「href="{% static 'app_name/css/style.css' %}"」という様にアプリケーション名を合わせて指定することになります。

上記例のテンプレート変数「static」は表向きの URL としては STATIC_URL が紐付き、実際は STATIC_ROOT で指定したディレクトリを参照します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です