2014-07-24 106 views
24

下面是我試圖實現的一個示例。預期的效果是,只有當其相關設置存在時,特定功能纔會生效。否則,該功能應該被禁用。Django:檢查設置變量是否設置

settings.py:

SOME_VARIABLE = 'some-string' 
ANOTHER_VARIABLE = 'another-string'

random_code_file.py:

from django.conf import settings 

if settings.is_defined('ANOTHER_VARIABLE'): # <- I need this. 
    do_something(settings.ANOTHER_VARIABLE) 
else: 
    do_something_completely_different() 

在上面的代碼中,我失去了什麼我應該做的,而不是settings.is_defined

如果這完全是對問題的錯誤解決方法,我很樂意聽到其他方法。所需的效果是自動激活功能,只有在相關設置存在時纔會生效。我希望避免一些特殊的settings.ACTIVE_FEATURES設置或特殊值(例如空白字符串或None)來評估特性是否生效。

我想要做的最後一件事就是使用try/except。我寧願選擇一個空值來表示排除該功能。 - 但如果嘗試/除了它是真正的首選方法,如果提供詳盡的來源或解釋,我會將答案標記爲正確。事實上,這是任何答案。

因此,總之,我需要正確的方法來檢查設置變量是否在Django中定義。

提前致謝!

+2

這是爲什麼特定於Django?我相信有一個內置的Python方法可以讓你做到這一點 – nmagerko

+0

我認爲'設置'對象是Django獨有的。我不認爲你可以教我如何在Python中做到這一點? :) – Teekin

回答

43

看來你已經做到了正確的方式:導入設置模塊並檢查。

而且你可以嘗試使用:代替

if hasattr(settings, 'ANOTHER_VARIABLE'):

if settings.is_defined('ANOTHER_VARIABLE'):

我發現the documentation,希望這可以幫助。