有没有一种简单的方法可以告诉Django的runserver
覆盖settings.py
文件中的单个变量?
我很乐意打电话:
python manage.py runserver 0.0.0.0:8000 Debug=False
有什么想法吗?
Motive:有一个特定的网站,有数百个数据库查询来显示或保存特定的页面,我希望能够快速关闭调试,而无需编辑我的设置文件(有可能是忘了)。
答案 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代码。)
更新:评论者表示,当DEBUG
为True
时,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重新绑定攻击。