我是新来的Python装饰所以也许我失去了一些东西简单,这里是我的情况:
这对我的作品:
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):
...
有没有办法使用与设置字典装饰的方式,还是我做错了什么?
提前致谢!
你应该覆盖整个字典:
@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):
...
我不想要么覆盖整个字典,所以我复制有问题的字典从settings
对象并修改我感兴趣的属性:
import copy
from django.conf import settings
settings_dict = deepcopy(settings.SETTINGS_DICT)
settings_dict['key1']['key2'] = 'new value'
@override_settings(SETTINGS_DICT=settings_dict)
def test_something(self):
pass
它适合我的目的,但如果你想使这个更广泛的使用,你可以写一些参数可能做这样的事情动态短的功能。
注:我尝试使用settings.SETTINGS_DICT.copy()
的deepcopy(settings.SETTINGS_DICT)
代替,但似乎在全球范围内覆盖所有测试设定...