Django MEDIA_URL再次...... Unhandle

时间:2011-02-23 14:07:07

标签: django deployment

我的settings.py文件

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处有未处理的异常(我在urls.py中没有映射url)

在DEBUG模式下一切正常,因为我在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

时我需要做什么

2 个答案:

答案 0 :(得分:1)

正在发生的事情是,在DEBUG模式下,django会为你的style.css文件提供服务。你告诉它用这一行

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

但是当debug为false时,这一行不会进入urlpatterns变量。要测试,当debug为true(应该有效)时,尝试访问localhost:8000/site_media/style.css,当它为false时(将给出404错误)。

你可以省略

if settings.DEBUG:

部分,但这意味着django仍将提供静态文件,出于性能原因,不建议在生产中使用。

在生产设置中,您应该使用不同的Web服务器来提供静态文件。我在apache前面运行nginx有很好的经验。

这是一个很好的教程,向您展示如何创建这样的设置: http://www.ventanazul.com/webzine/tutorials/django-deployment-guide-ubuntu

尽管创建生产设置并不像只输入python manage.py runserver那样轻松,但要做好准备。我也听说过将nginx与gunicorn一起使用的好处,这使得设置一个生产服务器变得更加简单,但我自己也没有经验。

答案 1 :(得分:0)

你需要自己以某种方式为他们服务。

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

在制作中,使用ApacheNginx之类的内容来提供静态文件。

基本上,您将服务器中的URL(在您的情况下为/site_media/)映射到服务器上的文件夹(就像您的媒体目录所在的位置)并且您已完成。现在,/site_media/的所有请求都没有转到您的应用,而是在目录中搜索要提供的静态文件。

实施取决于您选择的服务器设置。