[英]Serving static media during Django development: Why not MEDIA_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
是保存/home/media/media.lawrence.com/
等媒體的目錄的絕對路徑。
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_URL
和MEDIA_ROOT
......這是djangodocs linkslap 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.