我的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
答案 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)
你需要自己以某种方式为他们服务。
在制作中,使用Apache
或Nginx
之类的内容来提供静态文件。
基本上,您将服务器中的URL(在您的情况下为/site_media/
)映射到服务器上的文件夹(就像您的媒体目录所在的位置)并且您已完成。现在,/site_media/
的所有请求都没有转到您的应用,而是在目录中搜索要提供的静态文件。
实施取决于您选择的服务器设置。