What precisely are the functional differences between toggling the DEBUG
setting in a settings.py file of a Django app?
I first assumed
One of the main advantages of DEBUG=True is of detailed error pages. Django provides a detailed stacktrace of what went wrong. Which is immensely helpful in debugging. Basically, in DEBUG mode, django remembers every SQL query it executes(Which again makes it totally not suitable for production).
Additionally, if DEBUG=True, host validation is disabled. In other words, if DEBUG=False, ALLOWED_HOSTS needs to be set.
The DEBUG=True
, if there is error, page will show details of error.
if DEBUG=False
, the ALLOWED_HOSTS
of settings.py
will work, you should take carefully to set it.
the media
and static
will not provide access for DEBUG=False
, you have to provide them with the help of webserver, like Nginx
or Apache
.
As of Django 1.6.2 it has been identified before that import errors are not necessarily caught in DEBUG=True
but certainly are in DEBUG=False
Simple example: Try importing your app's settings.py
(import yourapp.settings
) into one of your views and then try referencing a non-existent variable: settings.var_that_does_not_exist
. This will only be an issue (causing status 500 errors) for when DEBUG=False
for any views that reference that non-existent variable.