2014-06-13 38 views
6

我是新来的Python装饰所以也许我失去了一些东西简单,这里是我的情况:Django @override_settings不允许使用字典吗?

这个工作对我来说:

def test_something(self): 
    settings.SETTING_DICT['key'] = True #no error 
    ... 

但这抛出一个“语法错误:关键字不能是表达“:

@override_settings(SETTING_DICT['key'] = True) #error 
def test_something(self): 
    ... 

只要是明确的,正常使用的替代设置工作:

@override_settings(SETTING_VAR = True) #no error 
def test_something(self): 
    ... 

是否有使用与设置字典装饰的方式,还是我做错了什么?

提前致谢!

+0

@AamirAdnan它看起来并不像一个重复的 - 非常Django的具体。希望你同意。 – alecxe

+0

@alecxe一个装饰器只是一个功能,所以为什么这不能重复?显然它出现在不同的背景下,但核心问题是相同的? –

+0

@AamirAdnan好,这肯定是相关的,我同意,但不是重复的 - 只是我的意见。 – alecxe

回答

9

你应该覆盖整个字典:

@override_settings(SETTING_DICT={'key': True}) 
def test_something(self): 
    ... 

或者,你可以使用override_settings作为一个上下文管理器:

def test_something(self): 
    value = settings.SETTING_DICT 
    value['key'] = True 
    with override_settings(SETTING_DICT=value): 
     ... 
+0

感谢!我会用你的第一种方法 – WBC

+1

重写整个字典不离其他键完好,不过,对不对? – Flimm