2011-02-23 61 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一起使用的好处,这使得设置生产服务器变得更简单,但我自己也没有经验。