Django:从manage.py runserver命令覆盖Debug = True

时间:2011-09-03 21:34:23

标签: django

有没有一种简单的方法可以告诉Django的runserver覆盖settings.py文件中的单个变量?

我很乐意打电话:

python manage.py runserver 0.0.0.0:8000 Debug=False

有什么想法吗?

Motive:有一个特定的网站,有数百个数据库查询来显示或保存特定的页面,我希望能够快速关闭调试,而无需编辑我的设置文件(有可能是忘了)。

2 个答案:

答案 0 :(得分:18)

我认为你有两个选择

最简单的可能是自定义设置覆盖,例如:

# no_debug_settings.py

# pull in the normal settings
from settings import *

# no debug for us
DEBUG = False

现在,当您想要在没有调试的情况下启动时,您将运行:

python manage.py runserver --settings=no_debug_settings 0.0.0.0:8000 

作为替代方案,您可以自定义manage.py文件。导入设置,并将其传递给execute_manager。如果您在导入和调用之间添加了一些代码,则可以检查其他参数并根据需要更改设置。它更加繁琐,容易被打破/被遗忘,所以我建议覆盖设置包装器可能是你最好的方法。

答案 1 :(得分:7)

我使用条件块编辑了我的import os # If needed. if os.environ.get('DJANGO_DEBUG'): print("Debug is enabled.") DEBUG = True # When not specified, ALLOW_HOSTS defaults to: # ALLOWED_HOSTS = ['localhost', '127.0.0.1', '[::1]'] else: DEBUG = False ALLOWED_HOSTS = ["*"] 文件,如下所示:

DJANGO_DEBUG=1

然后,通过传递环境变量DJANGO_DEBUG=1 python -Wall manage.py runserver 来运行您的服务器。只要您保持一致,就可以将变量命名为任何名称:

manage.py

在调用0以禁用调试时忽略该环境变量(因为将其设置为任何值,包括ALLOWED_HOSTS仍将使其适用于Python代码。)

更新:评论者表示,当DEBUGTrue时,ALLOWED_HOSTS指令会被忽略。这仅适用于旧版本的Django。如果在DEBUG启用时未指定,则当前行为是为了尊重{{1}}或默认为localhost地址。我的答案已更新,以反映这是一个小修正。

这来自this thread

  

当DEBUG为True且ALLOWED_HOSTS为空时,主机为   经过验证[' localhost',' 127.0.0.1',' [:: 1]']

此外,它还指出您的评论行为现在已在几个主要版本行中过时:

  

在旧版本中,如果DEBUG = True,则不检查ALLOWED_HOSTS。   在Django 1.10.3,1.9.11和1.8.16中也改变了这一点以防止a   DNS重新绑定攻击。