Django: переопределить Debug = True из команды manage.py executeerver
Есть ли простой способ сказать Django runserver
переопределить одну переменную в файле settings.py
?
Мне бы очень хотелось позвонить:
python manage.py runserver 0.0.0.0:8000 Debug=False
Любые мысли?
Мотив: есть конкретный сайт, на котором есть сотни запросов к базе данных для показа или сохранения определенной страницы, я бы хотел быстро отключить отладку, не редактируя файл настроек (который имеет возможность быть забыли).
Ответы
Ответ 1
Я думаю, у вас есть две опции
Простейшим, вероятно, является переопределение пользовательских настроек, например:
# 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
. Если вы добавили код между импортом и вызовом, вы можете проверить его на наличие дополнительных аргументов и изменить настройки по мере необходимости. Это немного более странно и склонно ломаться/забываться, поэтому я бы предложил, чтобы оболочка переопределения настроек, вероятно, была вашим лучшим способом.
Ответ 2
Я редактировал файл settings.py
с условным блоком, например:
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
, чтобы отключить debug (поскольку установка его для любого значения, включая 0
, все равно сделает его верным для кода Python.)
Обновление:. Комментирующий заявил, что директива ALLOWED_HOSTS
игнорируется, если DEBUG
- True
. Это справедливо только в более ранних версиях Django. Текущее поведение заключается в том, чтобы почитать ALLOWED_HOSTS
или по умолчанию локальные адреса, если он не указан, когда включен DEBUG
. Мой ответ обновлен, чтобы отразить это как незначительную коррекцию.
Это источник из документации Django:
Когда DEBUG является True и ALLOWED_HOSTS пуст, хост проверено против ['localhost', '127.0.0.1', '[:: 1]']
Кроме того, в нем указано, что поведение вашего комментария теперь устарело в нескольких основных версиях:
В старых версиях ALLOWED_HOSTS не был проверен, если DEBUG = True. Это также было изменено в Django 1.10.3, 1.9.11 и 1.8.16, чтобы предотвратить Перезагрузка DNS.