静态文件赢得';在Django中退出调试时无法加载
我正在创建一个Django项目。我刚刚尝试将项目从调试中删除,静态文件赢得';在Django中退出调试时无法加载,django,debugging,static-files,django-static,Django,Debugging,Static Files,Django Static,我正在创建一个Django项目。我刚刚尝试将项目从调试中删除,debug=False,由于某些原因,我的所有静态文件都没有显示出来。他们给出的错误代码是500。我该如何解决这个问题 部分settings.py: DEBUG = True TEMPLATE_DEBUG = DEBUG ... TEMPLATE_LOADERS = ( 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_d
debug=False
,由于某些原因,我的所有静态文件都没有显示出来。他们给出的错误代码是500。我该如何解决这个问题
部分settings.py:
DEBUG = True
TEMPLATE_DEBUG = DEBUG
...
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
# 'django.template.loaders.eggs.Loader',
)
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
静态文件应用程序未在
DEBUG=False
模式下自动为静态媒体提供服务。从django.contrib.staticfiles.url
:
# Only append if urlpatterns are empty
if settings.DEBUG and not urlpatterns:
urlpatterns += staticfiles_urlpatterns()
您可以通过手动附加到
urlpatterns
来提供服务,或者使用服务器来提供静态文件(就像在非调试模式下运行Django项目时应该提供的那样)
虽然有一件事我很好奇,为什么你得到的是500状态码而不是404。在这种情况下有什么例外
编辑
因此,如果您仍然希望通过staticfiles应用程序提供静态文件,请将以下内容添加到您的根url配置(urls.py
):
如果settings.DEBUG为False:#如果DEBUG为True,将自动提供服务
urlpatterns+=模式(“”,
url(r'^static/(?P.*)','django.views.static.service',{'document\u root':settings.static\u root}),
)
不过,您需要记住一些事情:
- 不要在生产环境中使用此选项(因为静态文件呈现通过Django进行,而不是由web服务器直接提供服务,所以速度较慢)
- 很可能您必须使用管理命令将静态文件收集到
(static\u ROOT
)。有关更多信息,请参阅。这是非常必要的,因为您在非调试模式下运行manage.py collectstatic
- 不要忘记在
urls.py中从django.conf导入设置
)
我不确定这个电子邮件问题是故意的还是一个bug你能说得更具体一点吗,哪一部分?它相当长。您是通过django开发服务器还是自己的Web服务器提供静态文件。如果是dev服务器,那么您在URL中的什么位置处理静态文件?您可能会发现,一旦关闭调试,处理静态文件的URL将被禁用。我不确定在哪里处理静态文件,我正在使用Django开发服务器。我想发生的事情就是你写的,关闭调试后,URL与静态文件的链接被禁用,你知道我应该怎么做吗?下面是重复问题的答案:可能重复我不知道我是否理解,这是一个答案还是一个问题,你说的部分在哪里:这是你应该做的。。。?“您可以通过手动附加到urlpatterns来提供服务,或者使用服务器来提供静态文件(就像在非调试模式下运行Django项目时应该提供的那样)。”“答案是什么?如果需要,我将为您添加一个示例,尽管它与Django 1.3之前的静态文件服务相同。是的,最后一个是问题。那么,对于这个500响应,会引发什么异常呢?很感兴趣。太好了,这就成功了,我刚刚将那段代码添加到我的url.py文件中,它就像一个符咒一样工作。。。谢谢。我对500的猜测是,因为DEBUG是真的,django然后尝试呈现404.html模板,这会引发TemplateDoesNotExist错误,所以它尝试呈现500.html模板,它也不存在,只会引发500。您可能认为django会更好地处理这种情况,但事实并非如此。@pankajan和Its仍然建议通过apache直接提供静态文件,而不是通过django。至少在您的实例上运行了生产流量之后,这将有助于提高性能。我可以确认,这仍然适用于Django 1.5。谢谢:)谢谢。这就是我的问题最终所需要的。
if settings.DEBUG is False: #if DEBUG is True it will be served automatically
urlpatterns += patterns('',
url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}),
)