2014-06-13 7 views
6

Ben belkide ben basit bir şey eksik Python dekoratörler için yeni, burada benim durumdur anahtar kelimenin olamaz ifadesi ": Django @override_settings sözlüğe izin vermiyor mu?</p> <pre><code>def test_something(self): settings.SETTING_DICT['key'] = True #no error ... </code></pre> <p>Ama bu bir "SyntaxError atar: Bu benim için çalışıyor</p> <p>:

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

Daha açıkçası, geçersiz kılma ayarlarında normal kullanım çalışır:

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

Dekoratörün bir ayar sözlüğü ile kullanılmasının bir yolu var mı, yoksa yanlış bir şey mi yapıyorum?

Şimdiden teşekkürler! Bir bağlam yöneticisi olarak override_settings kullanabilirsiniz

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

Veya:

+0

bir yinelenen gibi görünmüyor @AamirAdnan - çok özel django. Umarım katılıyorumdur. – alecxe

+0

@alecxe bir dekoratör sadece bir işlevdir, bu nedenle neden yinelenemez? Açıkçası buradaki farklı bağlamda ortaya çıkıyor ancak temel sorun aynı mı? –

+0

@AamirAdnan iyi, bu kesinlikle ilgili, katılıyorum, ama bir kopya değil - sadece benim düşüncem. – alecxe

cevap

9

Sen bütün dicti geçersiz kılmak gerekir

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

teşekkürler! İlk yönteminizi kullanacağım – WBC

+1

Bütün bu kuralların geçersiz kılınması diğer anahtarları sağlam bırakmıyor, değil mi? – Flimm

İlgili konular