django には 2 種類の「静的」ファイルがあります。
- アプリケーションにバンドルされたリソース/アセット (通常は css、javascript)
- ユーザーがアップロードしたすべてのファイル。
これらは静的ファイルの 2 つの異なるカテゴリであるため、django はそれらを処理するための 2 つのメカニズムを提供します。最初の条件は 2 番目の条件よりも一般的であるため (ユーザーにファイルのアップロードを要求するアプリケーションがない可能性があります)、最初の条件の処理は django に組み込まれています。
標準のレイアウトに従って、静的ファイルを必要とするstaticアプリケーションは、アプリケーション ディレクトリ内で呼び出されるディレクトリにそれらを含めます。INSTALLED_APPSDjango は、静的ファイル用のアプリ内でこのディレクトリを検索します。どのアプリにも関連付けられていないファイルがある場合は、それらを別のディレクトリに配置できます。STATICFILES_DIRSdjango が認識できるように、このディレクトリを (タプル) に追加する必要があります。
これが完了すると、collectstaticコマンドはすべての静的ファイルを (static内のすべてのアプリケーションのサブディレクトリと 内INSTALLED_APPSの任意のディレクトリからSTATICFILES_DIRS) 収集し、それらをSTATIC_ROOT;が指すディレクトリに配置します。これは、{{ STATIC_URL }}タグがテンプレートで正しく機能するためです。
STATIC_ROOTあとは、Web からアクセスできるようにディレクトリを移動/ポイント/リンクするだけです。Django は、STATIC_ROOTで指定されたルート URL ですべてのファイルにアクセスできることを想定していますSTATIC_URL。
ユーザーがアップロードしたファイルの場合、django はより手間がかかりません。本当に気にするのは、ユーザーがアップロードしたファイルを、collectstaticコマンドがファイルを読み取るために使用するのと同じ場所に置かないことです-つまり、MEDIA_ROOTディレクトリまたはサブディレクトリにすることはできませんSTATICFILE_DIRS(ディレクトリを指定した場合)ここでは、通常、この設定はバニラ django セットアップでは定義されていません)。
MEDIA_ROOTは、ルートの下にサブディレクトリを作成することで django が操作できるディレクトリです (たとえば、FileFieldドキュメントを参照してください)。
MEDIA_URLユーザーがアップロードしたファイルのルートを指す URL プレフィックスです。これは、モデルの自動 URL を生成するコマンドが正しく機能するようにするためです。
これらは 2 つの異なるクラスの静的ファイルであるため、セキュリティと展開の要件には 2 つの異なるタイプがあります。たとえば、ユーザーがアップロードしたファイルを S3 バケットに保存し、アプリケーションのアセットを別の場所に置きたい場合があります。
これが、これら 2 つの類似したものが django で分離されている理由です。