Djangoの'staticfiles'
アプリのSTATIC_URLとSTATIC_ROOTの違いについて少し混乱しています。
STATIC_ROOT
が何であるかを理解していると思います。これは基本的に、staticfilesのcollectstatic
コマンドがDjangoプロジェクトから収集した静的ファイルを配置する、サーバー上の場所です。 。collectstatic
コマンドは、STATIC_FINDERS
設定で指定した場所を検索します。
しかし、STATIC_URL
は正確に何をしますか?これは何に設定する必要がありますか?どうやら、ユーザーが静的ファイルにアクセスできるように設定することを目的としています。しかし、それはSTATIC_ROOT
との関係は何ですか?
STATIC_URL
のデフォルト値が単に/static/
であるのはなぜですか? STATIC_URL
はSTATIC_ROOT
を参照できる必要がありますか?
STATIC_URL
は、静的ファイルの前に付加されるプレフィックスまたはURLであり、Djangoテンプレートのほとんどでstatic
メソッドによって使用されます。 。詳細については、 this をお読みください。
STATIC_ROOT
は、collectstatic
を実行したときに静的ファイルがデプロイされるディレクトリまたは場所です。
したがって、STATIC_URL
が/static/
として定義されている場合、ユーザーは/static/file-name.example
(サーバー上の相対URL)から静的ファイルを要求します。
静的ファイルを別のサーバーにデプロイするようにcollectstatic
をカスタマイズした場合は、STATIC_URL
をhttps://static.example.org/
に設定できます。
次に、https://static.example.org/filename.ext
でファイルにアクセスします。
私が持っているもう1つの例は、BotoS3ライブラリを使用して静的コンテンツとメディアコンテンツをAmazonS3にアップロードすることです。私のSTATIC_URL
は次のようになります:
STATIC_URL = '//%s/%s/' % (CLOUDFRONT_DOMAIN, STATIC_S3_PATH)
この//mycloudfront.whatever/static/
のような静的URLプレフィックスを作成するため、ユーザーにはCDNからファイルが提供されます。
ただし、私のSTATIC_ROOT
は次のように定義されています。
STATIC_ROOT = '/%s/' % STATIC_S3_PATH
...コンテンツをAmazonS3とnotCloudfrontにアップロードする必要があるため。
STATIC_ROOT
は、すべてのアセットがcollectstatic
コマンドによって収集される場所です。このコンテンツには、INSTALLED_APPS
(独自のstatic
フォルダーから)にリストされているすべてのアプリケーションのすべての静的アセットと、 STATICFILE_DIRS
に記載されているファイルの場所が直接含まれています。
これらのアセットをすべて収集したら、DjangoでURLを作成するには、これらのアセットのベースURLを指定する必要があります。これは、STATIC_URL
設定です。常にスラッシュで終わります。