2011-09-03 80 views
12

是否有一種簡單的方法可以告訴Django的runserver覆蓋settings.py文件中的單個變量?Django:Override Debug = True from manage.py runserver命令

我希望能夠調用:

python manage.py runserver 0.0.0.0:8000 Debug=False 

有什麼想法?

動機:有一個特定的網站,其中有數百個數據庫查詢來顯示或保存特定頁面,我希望能夠快速關閉調試,而無需編輯我的設置文件(它有可能被遺忘)。

回答

15

我認爲你有兩個選擇

最簡單的可能是一個自定義的設置覆蓋,是這樣的:

# 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。如果您在導入和調用之間添加了一些代碼,則可以檢查額外的參數並根據需要更改設置。這有點煩瑣,容易中斷/被遺忘,所以我建議覆蓋設置包裝可能是你最好的選擇。

+0

這足夠接近單個命令,謝謝! – Ted

+1

'DJANGO_SETTINGS_MODULE' env var可用於指定特定設置文件的環境。 – ThorSummoner

5

我編輯我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時環境變量來禁用調試(因爲它設置爲任意值,包括0仍然會是真的到了Python:只要你是一致的,你可以隨意命名變量什麼代碼)

更新:一個評論者指出,當DEBUGTrueALLOWED_HOSTS指令被忽略。這隻適用於舊版本的Django。如果當DEBUG啓用時未指定,則當前行爲是表彰ALLOWED_HOSTS或默認爲本地主機地址。我的答案已更新,以反映這是一個小小的更正。

這是從Django documentation來源:

當DEBUG爲True,並且ALLOWED_HOSTS是空的,所述宿主是 針對[ '本地主機', '127.0.0.1' 驗證, '[:: 1]' ]

此外,它指出,在現在的幾個主要版本線過時您的評論的行爲:

在舊版本中,ALLOWED_HOST如果DEBUG = True,則不檢查S。 Django 1.10.3,1.9.11和1.8.16中的這一點也發生了變化,以防止發生DNS重綁定攻擊 。

+0

當DEBUG開啓時,'ALLOWED_HOSTS'被忽略。如果您只想從本地主機訪問,最簡單的控制方法是使用'runserver'命令行設置綁定哪個接口。 – rescdsk

+1

只適用於Django的*舊版本。請看我更新的答案。 – DamnedFacts

相關問題