Django中DEBUG=True和False的功能差异是什么?

9 投票
3 回答
16094 浏览
提问于 2025-04-19 22:31

在Django应用的settings.py文件中,切换DEBUG设置到底有什么具体的功能差异呢?

我最开始以为DEBUG=True只是开启了Django的日志记录功能和错误报告的中间件,但现在我意识到这想法太简单了。了解Django内部系统在这两个设置下是如何不同工作的,有助于我们在处理难以调试的500状态错误时形成一些假设。

3 个回答

0

在Django 1.6.2版本中,之前有发现过一个问题,就是在DEBUG=True的情况下,导入错误不一定会被捕捉到,但在DEBUG=False时肯定会被捕捉到。

举个简单的例子:试着在你的应用的视图中导入settings.py(也就是import yourapp.settings),然后引用一个不存在的变量,比如settings.var_that_does_not_exist。这个问题只会在DEBUG=False时出现,导致500错误,尤其是那些引用了这个不存在变量的视图。

5
  1. 当你把 DEBUG=True 设置为真时,如果出现错误,页面会显示错误的详细信息。

  2. 如果把 DEBUG=False 设置为假,那么 settings.py 文件里的 ALLOWED_HOSTS 就会生效,你需要小心设置这个选项。

  3. DEBUG=False 的情况下,mediastatic 文件是无法直接访问的,你需要通过像 NginxApache 这样的网络服务器来提供这些文件。

5

DEBUG=True的一个主要好处是可以看到详细的错误页面。Django会提供出错时的详细信息,这对调试非常有帮助。简单来说,在DEBUG模式下,Django会记录它执行的每一个SQL查询(这也是为什么这个模式完全不适合用在生产环境中)。

另外,如果DEBUG=True,主机验证会被禁用。换句话说,如果DEBUG=False,就需要设置ALLOWED_HOSTS。

撰写回答