静态文件赢得';在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

我正在创建一个Django项目。我刚刚尝试将项目从调试中删除,
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导入设置

在Django 1.3中,如果您只是使用manage.py运行服务器进行测试,则可以添加选项“-unsecure”,如下所述:

它似乎仍然发送电子邮件给管理员,说没有模板,但它确实提供静态文件


我不确定这个电子邮件问题是故意的还是一个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}),
    )