2014-07-24 56 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,希望这可以帮助。