簡體   English   中英

在Django開發期間提供靜態媒體:為什么不MEDIA_ROOT?

[英]Serving static media during Django development: Why not MEDIA_ROOT?

我讀了這篇關於在開發過程中使用Django提供靜態媒體的指南

我注意到沒有使用MEDIA_URLMEDIA_ROOT 為什么? 有什么不同?

我嘗試使用MEDIA_URLMEDIA_ROOT ,並得到了奇怪的結果。

在生產環境中,您需要從前端Web服務器(Apache,Nginx等)提供媒體,以避免對Django / Python進程造成額外負擔。 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

MEDIA_ROOT是保存/home/media/media.lawrence.com/等媒體的目錄的絕對路徑。

MEDIA_URL

MEDIA_URL是處理從MEDIA_ROOT的媒體的URL。 如果存在路徑組件,請確保使用尾部斜杠(在其他情況下是可選的)。 示例:“ http://media.lawrence.com ”,“ http://example.com/media/ ”。

因此,重新編寫那些...... MEDIA_ROOT是文件在系統中物理MEDIA_URL的位置, MEDIA_URL是這些文件映射到的位置。 在開發過程中,這可能並不總是可訪問的,並且在大多數情況下,您的開發環境和生產環境不一樣,而且您將不得不返回並進行更改。 另一件事是,當Django被設計為不為您提供靜態內容時,它並不是一個好的做法。

如果您打算在開發中使用它,我建議您使用將其限制為DEBUG = True的方法 DEBUG設置為True時,告訴Django在開發時從臨時位置提供靜態內容是一種更好,更安全的做法。 您不打算使用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目錄,里面有所有必要的媒體。 在dev中,它是自包含的,除了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_URLMEDIA_ROOT

......這是djangodocs linkslap

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM