2011-02-23 43 views
0

我的settings.py文件Django的MEDIA_URL再次...未經處理過

MEDIA_ROOT = '/home/path/to/htdocs/mysite/public/media/' 
MEDIA_URL = '/site_media/' 
ADMIN_MEDIA_PREFIX = '/media/' 

在site_media我有我的圖片和CSS ...... href="{{ MEDIA_URL }}/style.css" ......(用{{MEDIA_URL}}的style.css是這個相同)

渲染後,像這樣 href="/site_media/style.css"

http://example.com/site_media/style.css有未處理的異常(我的東西沒有在URL映射urls.py)

一切都在調試模式下工作很好,因爲我有這個在urls.py

if settings.DEBUG: 
    urlpatterns += patterns('', 
    (r'^media/(.*)$', 'django.views.static.serve', {'document_root': os.path.join(os.path.dirname(__file__), 'media')}), 
    (r'^site_media/(.*)$', 'django.views.static.serve', {'document_root': os.path.join(os.path.dirname(__file__), 'site_media')}), 
) 

,但我需要什麼時候DEBUG = False

回答

0

你需要以某種方式爲他們自己做。

http://docs.djangoproject.com/en/dev/howto/static-files/#serving-static-files-from-a-dedicated-server

在生產中,使用類似ApacheNginx提供給您的靜態文件。

基本上,您將服務器中的URL(在您的案例中爲/site_media/)映射到服務器上的文件夾(如現在的媒體目錄所在的位置),然後就完成了。所有到/site_media/的請求現在都不會轉到您的應用程序,而是在目錄中搜索要提供的靜態文件。

實施取決於您要使用的服務器設置。

1

發生了什麼事是在調試模式下django服務於您的style.css文件。你告訴它做這一行

(r'^site_media/(.*)$', 'django.views.static.serve', {'document_root': os.path.join(os.path.dirname(__file__), 'site_media')}), 

但是這行不進入urlpatterns變量時,調試是假的。在debug爲true(應該有效)和false爲false(會給出404錯誤)時,測試那個試圖訪問localhost:8000/site_media/style.css

你可能只是離開了

if settings.DEBUG: 

一部分,但是這意味着Django的仍然會提供靜態文件和未在生產性能原因建議。

在生產設置中,您應該使用其他Web服務器來爲您的靜態文件提供服務。我在運行在apache前面的nginx有過很好的經驗。

這是一個很好的教程,告訴您如何創建這樣的設置: http://www.ventanazul.com/webzine/tutorials/django-deployment-guide-ubuntu

準備,雖然,創造一個產品設置是不太只是打字python manage.py runserver無痛。我也聽說過將nginx和gunicorn一起使用的好處,這使得設置生產服務器變得更簡單,但我自己也沒有經驗。