これら3つの静的URLの違いは何ですか?
自分が正しいかどうかわかりません。アップロードした写真を保存するために_MEDIA_ROOT
_を使用しています(models.ImageField()
経由)
ただし、管理者と_admin.py
_にJSスクリプトを作成しました。以下のようにメディアを定義しました:
_....
class Media:
js = ('/admin/custom.js', )
_
および私の_settings.py
_:
_ ....
STATIC_ROOT = "/home/user/project/Django1/top/listing/static"
_
_custom.js
_を_STATIC_ROOT/admin/custom.js
_に追加しましたが、機能していません。 404 not foundエラーをスローします。
そして、_STATIC_ROOT
_を_STATICFILES_DIRS
_に変更すると、動作します!!
_....
STATICFILES_DIRS = "/home/user/project/Django1/top/listing/static"
_
だから、私はここで何が起こっているのか理解していない。実際、私は_STATIC_ROOT
_と_STATICFILES_DIRS
_の違いを理解していません。
現在、私は仮想マシンを使用してDjangoをテストしていますが、まだデプロイされていません。それは_STATIC_ROOT
_が機能しない理由ですか??
これらの設定は Django documentation にあります。ドキュメントからの私自身の定義と引用は次のとおりです。
MEDIA_ROOT
は、FileField
を使用してアップロードされたファイルが保存されるフォルダーです。
ser-uploaded files を保持するディレクトリへの絶対ファイルシステムパス。
STATIC_ROOT
は、manage.py collectstatic
を使用した後に静的ファイルが保存されるフォルダーです
collectstatic
が展開用の静的ファイルを収集するディレクトリへの絶対パス。
staticfiles
contribアプリが有効になっている場合(デフォルト)、collectstatic
管理コマンドは静的ファイルをこのディレクトリに収集します。使用法の詳細については、静的ファイルの管理に関するハウツーを参照してください。
STATICFILES_DIRS
は、Django=がインストールされた各アプリのstatic
フォルダー以外の追加の静的ファイルを検索するフォルダーのリストです。
この設定は、
FileSystemFinder
Finderが有効になっている場合にstaticfilesアプリが通過する追加の場所を定義します。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
now。
STATIC_ROOT
は開発中は役に立たないため、デプロイメントにのみ必要です。
開発中、STATIC_ROOT
は何もしません。あなたもそれを設定する必要はありません。 Django=各アプリのディレクトリ(myProject/appName/static
)内の静的ファイルを探し、それらを自動的に提供します。
これは、manage.py runserver
のときにDEBUG=True
が行う魔法です。
プロジェクトが開始されると、状況は異なります。ほとんどの場合、Djangoを使用して動的コンテンツを提供し、静的ファイルはNginxによって提供されます。なぜですか?Nginxは非常に効率的であり、Djangoのワークロードを削減するからです。
NginxはDjangoプロジェクトについては何も知らず、静的ファイルの場所を知らないため、STATIC_ROOT
は便利です。
したがって、STATIC_ROOT = '/some/folder/'
を設定し、/some/folder/
で静的ファイルを探すようにNginxに指示します。次にmanage.py collectstatic
を実行し、Django=は、必要なすべてのアプリから静的ファイルを/some/folder/
にコピーします。
STATICFILES_DIRS
は、検索するcollectstatic
の-追加ディレクトリを含めるために使用されます。たとえば、デフォルトでは、Djangoは/myProject/static/
を認識しません。したがって、自分で含めることができます。
STATIC_URL = '/static/'
if not DEBUG:
STATIC_ROOT = '/home/Django/www-data/site.com/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static/'),
]
STATICFILES_DIRS
とSTATIC_ROOT
の違い
STATICFILES_DIRS
には静的ファイルを含む他のディレクトリ(必ずしもアプリディレクトリではない)を含めることができ、これらの静的ファイルはcollectstatic
の実行時にSTATIC_ROOTに収集されます。これらの静的ファイルはWebサーバーによって提供され、STATIC_ROOTから提供されます。
STATIC_ROOTに現在提供したいファイルがある場合、それらを別のディレクトリに移動し、その別のディレクトリをSTATICFILES_DIRS
に配置する必要があります。 STATIC_ROOT
ディレクトリは空にして、すべての静的ファイルをそのディレクトリに収集する必要があります。
MEDIA_ROOT
メディアファイル、アップロードされたすべてのファイルの場所。例:画像、ファイル