Django @override_settings不允许字典? [英] Django @override_settings does not allow dictionary?

查看:177
本文介绍了Django @override_settings不允许字典?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我很喜欢Python装饰器,所以也许我错过了一些简单的事情,这里是我的情况:



这对我有用:

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

但是这会抛出一个SyntaxError:关键字不能是表达式:

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

只是为了清楚,正常使用覆盖设置工作:

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

有没有办法使用装饰器设置字典,还是我做错了?



提前感谢

解决方案

你应该覆盖整个dict:

  @override_settings(SE TINT_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):
...


I am new to Python decorators so perhaps I am missing something simple, here is my situation:

This works for me:

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

But this throws a "SyntaxError: keyword can't be an expression":

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

Just to be clear, normal use of override settings works:

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

Is there a way to use the decorator with a settings dictionary, or am I doing something wrong?

Thanks in advance!

解决方案

You should override the whole dict:

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

Or, you can use override_settings as a context manager:

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

这篇关于Django @override_settings不允许字典?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆