開発中に Django で静的メディアを提供することに関するこのガイドを読みました。
私はそれに気づき、これで使用MEDIA_URL
さMEDIA_ROOT
れませんでした。なんで?違いは何ですか?
MEDIA_URL
とでやってみましたがMEDIA_ROOT
、奇妙な結果が得られました。
開発中に Django で静的メディアを提供することに関するこのガイドを読みました。
私はそれに気づき、これで使用MEDIA_URL
さMEDIA_ROOT
れませんでした。なんで?違いは何ですか?
MEDIA_URL
とでやってみましたがMEDIA_ROOT
、奇妙な結果が得られました。
本番環境では、Django/Python プロセスの余分な負荷を避けるために、メディアをフロント エンド Web サーバー (Apache、Nginx など) から提供する必要があります。これには通常、MEDIA_URL と MEDIA_ROOT が使用されます。
組み込みの開発サーバーを実行するには、url.py ファイルに正しい URL を設定する必要があります。通常、次のようなものを使用します。
from django.conf import settings
urlpatterns += patterns('',
(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
)
これは、設定ファイルから MEDIA_ROOT を取得します。これは、開発とライブで機能することを意味します。
settings.py のコメントから直接...
はMEDIA_ROOT
、 などのメディアを保持するディレクトリへの絶対パス/home/media/media.lawrence.com/
です。
はMEDIA_URL
、 から提供されるメディアを処理する URL ですMEDIA_ROOT
。パス コンポーネントがある場合は、必ず末尾のスラッシュを使用してください (その他の場合は省略可能)。例: 「http://media.lawrence.com」、「http://example.com/media/」。
つまり、それらを言い換えると...MEDIA_ROOT
はファイルがシステム上で物理的にMEDIA_URL
存在する場所であり、それらのファイルがマップされる場所です。開発中は、これに常にアクセスできるとは限りません。ほとんどの場合、開発環境と本番環境は同じではなく、戻って変更する必要があります。もう1つのことは、Djangoが静的コンテンツを提供しないように設計されている場合、それは良い習慣ではないということです.
これを開発で使用する場合は、 DEBUG=Trueに制限する方法を使用することをお勧めします。DEBUG
が に設定されている場合、開発中に一時的な場所から静的コンテンツを提供するように Django に指示することTrue
は、はるかに優れた安全な方法です。onを使用してサイトを本番環境に移行するつもりはありませんよねDEBUG
? まあ、少なくともそうすべきではありません。
これが私がそれを実装した方法です:
settings.py:
STATIC_DOC_ROOT = os.path.join(os.getcwd(), 'site_media')
urls.py:
from django.conf import settings
## debug stuff to serve static media
if settings.DEBUG:
urlpatterns += patterns('',
(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.STATIC_DOC_ROOT}),
)
このように、私が取り組んでいるプロジェクトにはsite_media
、必要なすべてのメディアを含むディレクトリがあります。開発では、それは自己完結型であり、設定のビットを反転する必要はありませんDEBUG
.
Django のドキュメントでは、ユース ケースに合わせて変更した次のアプローチを推奨しています。
urlpatterns = [
# url patterns
]
from django.conf import settings
if settings.DEBUG:
from django.conf.urls.static import static
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
注:上記は、およびを正しく設定したことを前提としています
MEDIA_URL
MEDIA_ROOT
...そして、これがdjangodocs linkslapです。