1. ホーム
  2. python

[解決済み] STATICFILES_DIR, STATIC_ROOT, MEDIA_ROOT の違いについて

2022-10-28 08:05:03

質問

これら3つの静的URLの違いは何ですか?

私は正しいかどうかわからないが、私は、この3つの静的URLのうち MEDIA_ROOT を使用してアップロードした写真を保存しています (via models.ImageField() )

しかし、管理画面にJSスクリプトを作成し、その中の admin.py . メディアを以下のように定義しました。

....
class Media:
      js = ('/admin/custom.js', )

で、私の settings.py :

 ....
 STATIC_ROOT = "/home/user/project/django1/top/listing/static"

を追加し、さらに custom.jsSTATIC_ROOT/admin/custom.js に変更しましたが、うまくいきません。404 not foundエラーになります。

そして、私は STATIC_ROOTSTATICFILES_DIRS で、うまくいきました!

....
STATICFILES_DIRS = "/home/user/project/django1/top/listing/static"

というわけで、私はここで何が起こっているのか理解できていません。実際、私は以下の違いがわかりません。 STATIC_ROOTSTATICFILES_DIRS .

現在、私は自分のマシンで virtualenv を使って Django をテストしていますが、まだデプロイしていません。 STATIC_ROOT が機能しない理由ですか?

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

これらの設定は Django ドキュメント . 以下は、私自身の定義と、ドキュメントからの引用です。

  • MEDIA_ROOT を使用してアップロードされたファイルが格納されるフォルダです。 FileField を使ってアップロードされたファイルが入るフォルダです。

    を格納するディレクトリへの絶対ファイルシステム・パス。 ユーザがアップロードしたファイル .

  • STATIC_ROOT を使用した後、静的ファイルが保存されるフォルダです。 manage.py collectstatic

    のあるディレクトリへの絶対パス。 collectstatic がデプロイ用の静的ファイルを収集するディレクトリへの絶対パスです。

    もし staticfiles contrib app が有効な場合(デフォルト)には collectstatic 管理コマンドは、このディレクトリに静的ファイルを収集します。使い方の詳細は、静的ファイルの管理に関するHowtoを参照してください。

  • STATICFILES_DIRS は、Django が追加静的ファイルを検索するフォルダのリストです。 static フォルダの他に、追加の静的ファイルを探すフォルダのリストです。

    この設定により、staticfilesアプリが FileSystemFinder ファインダーが有効な場合、例えば collectstatic または findstatic 管理コマンドを使用するか、静的ファイル提供ビューを使用します。

設定に、あるはずです。

MEDIA_ROOT = os.path.join(BASE_DIR, "media/")
STATIC_ROOT = os.path.join(BASE_DIR, "static/")

# Make a tuple of strings instead of a string
STATICFILES_DIRS = ("/home/user/project/django1/top/listing/static", )

...ところ。

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

で定義されているように、デフォルトの Django の settings.py になりました。