1. ホーム
  2. python

[解決済み] Django の collectstatic は何のためにあるのか?

2022-09-09 08:02:31

質問

これはおそらく愚かな質問だと思いますが、私の頭の中でピンとこないのです。

Django では、アプリに固有の静的ファイル (すなわち css や js) はすべて、 という名前のフォルダに置くのが慣例です。 static . つまり、このような構造になります。

mysite/
    manage.py
    mysite/ --> (settings.py, etc)
    myapp/ --> (models.py, views.py, etc)
        static/

mysite/settings.py を持っています。

STATIC_ROOT = 'staticfiles'

で、コマンドを実行すると

python manage.py collectstatic   

というフォルダが作成されます。 staticfiles というフォルダをルートレベル (つまり myapp/ )

これのどこがいいんだ?私のすべての静的ファイルのコピーを作成しているだけではありませんか?

どのように解決するのですか?

複数のアプリの静的ファイルを1つのパスに集める

さて、単一の Django プロジェクト は、複数の アプリ を使用する場合があります。したがって、そのような場合は、1 つの myapp となっていますが、実際には myapp1 , myapp2 など

個々のアプリの内部から単一のフォルダーにコピーすることで、フロントエンドの Web サーバー (例: nginx) をその単一のフォルダーに指定することができます。 STATIC_ROOT を指すようにし、静的ファイルを 1 つの場所から提供することができます。

による永続的な URL ManifestStaticFilesStorage

バージョン管理のためにファイル名に追加される MD5 ハッシュについてのメモです。のデフォルトの動作の一部ではありません。 collectstatic のデフォルトの動作ではありません。 settings.STATICFILES_STORAGE はデフォルトで StaticFilesStorage (これはそうしません)

MD5 ハッシュを使用するように設定した場合、例えば ManifestStaticFilesStorage を使用するように設定すると、その動作が追加されます。

このストレージの目的は、古いファイルを提供し続けることです。 ページがまだそれらのファイルを参照している場合、古いファイルを提供し続けるためです。 またはサード パーティのプロキシ サーバーによってキャッシュされている場合などです。さらに、次のような場合に非常に役に立ちます。 に展開されたファイルに遠い将来の Expires ヘッダを適用したい場合に非常に役に立ちます。 ロード時間を短縮することができます。