为啥当 Debug 设置为 False 时,Django 会为静态媒体生成 HTTP 500 错误?

Posted

技术标签:

【中文标题】为啥当 Debug 设置为 False 时,Django 会为静态媒体生成 HTTP 500 错误?【英文标题】:Why does Django generate HTTP 500 errors for static media when Debug is set to False?为什么当 Debug 设置为 False 时,Django 会为静态媒体生成 HTTP 500 错误? 【发布时间】:2010-09-12 10:05:24 【问题描述】:

我正准备部署我的 Django 应用程序,我注意到当我将“DEBUG”设置更改为 False 时,对静态文件(即 javascript、CSS 等)的所有引用都会导致 HTTP 500 错误。

知道是什么导致了这个问题(以及如何解决它)吗?

【问题讨论】:

【参考方案1】:

我强烈建议让您的 Web 服务器处理静态请求,而无需使用 Django。在我的urls.py 中,我只在调试设置为 True 时添加静态请求处理程序。

从技术上讲,提供静态服务的 Django 可以正常工作。一定要阅读简短的文档页面,http://docs.djangoproject.com/en/dev/howto/static-files/。你会想在urls.py中使用这样的条目

(r'^static/(?P<path>.*)$', 'django.views.static.serve',
    'document_root': '/path/to/media')

【讨论】:

哈。如果我查看自己的 urls.py 可能会有所帮助。我已经把所有的设置都连接好了。呃……它的开发周期很长。 :)【参考方案2】:

听起来您可能正在尝试使用 Django 开发服务器来提供静态媒体。查看http://docs.djangoproject.com/en/dev/howto/deployment/ 了解一些部署方案/howtos 和http://docs.djangoproject.com/en/dev/howto/static-files/ 了解如何提供静态文件(但请注意关于不在生产中使用这些方法的免责声明)。

一般来说,我会查看您的服务器日志,看看它试图从哪里获取文件。我怀疑 500 错误实际上是 404 错误,但它们变成了 500 错误,因为 Django 无法找到或呈现 404.html 模板。如果不是这种情况,如果您可以发布您遇到的特定 500 错误将会很有帮助。

【讨论】:

【参考方案3】:

您还必须到处检查您的网址。当 DEBUG 设置为 False 时,所有没有尾随“/”的 URL 都被视为错误,这与 DEBUG = True 不同,在这种情况下,Django 将在丢失的任何地方附加“/”。因此,简而言之,请确保所有链接都以斜线结尾。

【讨论】:

【参考方案4】:

原来我注释掉了SECRET_KEY 变量。不过,我没有办法知道。只是不得不尝试一下。

【讨论】:

以上是关于为啥当 Debug 设置为 False 时,Django 会为静态媒体生成 HTTP 500 错误?的主要内容,如果未能解决你的问题,请参考以下文章

为什么只有当Debug = False并且db在Heroku上设置为生产数据库时,django才会因服务器500而失败?

当模板调试设置为 False 时,Django 上的服务器错误(500)?

当 DEBUG = False 时 Django 转义 javascript

当 DEBUG 为 False 时,Django 为所有静态文件(如 CSS 和图像)提供错误 500

使用 DEBUG 设置为 False 记录 Django SQL 查询

Django设置 DEBUG=False后静态文件无法加载解决