21

開発中に Django で静的メディアを提供することに関するこのガイドを読みました。

私はそれに気づき、これで使用MEDIA_URLMEDIA_ROOTれませんでした。なんで?違いは何ですか?

MEDIA_URLとでやってみましたがMEDIA_ROOT、奇妙な結果が得られました。

4

3 に答える 3

28

本番環境では、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 を取得します。これは、開発とライブで機能することを意味します。

于 2010-02-10T14:37:21.940 に答える
22

settings.py のコメントから直接...

MEDIA_ROOT

MEDIA_ROOT、 などのメディアを保持するディレクトリへの絶対パス/home/media/media.lawrence.com/です。

MEDIA_URL

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.

于 2010-02-10T14:40:57.073 に答える
13

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_URLMEDIA_ROOT

...そして、これがdjangodocs linkslapです。

于 2016-07-18T21:53:02.460 に答える