web-dev-qa-db-ja.com

DjangoのSTATIC_URLとSTATIC_ROOTの違いは何ですか?

Djangoの'staticfiles'アプリのSTATIC_URLとSTATIC_ROOTの違いについて少し混乱しています。

STATIC_ROOTが何であるかを理解していると思います。これは基本的に、staticfilesのcollectstaticコマンドがDjangoプロジェクトから収集した静的ファイルを配置する、サーバー上の場所です。 。collectstaticコマンドは、STATIC_FINDERS設定で指定した場所を検索します。

しかし、STATIC_URLは正確に何をしますか?これは何に設定する必要がありますか?どうやら、ユーザーが静的ファイルにアクセスできるように設定することを目的としています。しかし、それはSTATIC_ROOTとの関係は何ですか?

STATIC_URLのデフォルト値が単に/static/であるのはなぜですか? STATIC_URLSTATIC_ROOTを参照できる必要がありますか?

16
Izzo

STATIC_URL は、静的ファイルの前に付加されるプレフィックスまたはURLであり、Djangoテンプレートのほとんどでstaticメソッドによって使用されます。 。詳細については、 this をお読みください。

STATIC_ROOT は、collectstaticを実行したときに静的ファイルがデプロイされるディレクトリまたは場所です。

したがって、STATIC_URL/static/として定義されている場合、ユーザーは/static/file-name.example(サーバー上の相対URL)から静的ファイルを要求します。

静的ファイルを別のサーバーにデプロイするようにcollectstaticをカスタマイズした場合は、STATIC_URLhttps://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にアップロードする必要があるため。

2
A. J. Parr

STATIC_ROOTは、すべてのアセットがcollectstaticコマンドによって収集される場所です。このコンテンツには、INSTALLED_APPS(独自のstaticフォルダーから)にリストされているすべてのアプリケーションのすべての静的アセットと、 STATICFILE_DIRS に記載されているファイルの場所が直接含まれています。

これらのアセットをすべて収集したら、DjangoでURLを作成するには、これらのアセットのベースURLを指定する必要があります。これは、STATIC_URL設定です。常にスラッシュで終わります。

1
Burhan Khalid