2014-06-13 6 views
6

Jestem nowy dekoratorów Pythona więc może jestem brakuje czegoś proste, oto moja sytuacja:Django @override_settings nie zezwala na słownik?

Działa to dla mnie:

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

Ale to rzuca „SyntaxError: Hasło nie może być wyrażenie ":

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

Wystarczy być jasne, normalne korzystanie z ustawieniami zastępują działa:

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

Czy istnieje sposób użycia dekoratora ze słownikiem ustawień lub czy robię coś nie tak?

Z góry dziękuję!

+0

@AamirAdnan to nie wygląda duplikatu - bardzo specyficzny django. Mam nadzieję, że się zgadzasz. – alecxe

+0

@alecxe dekorator jest tylko funkcją, więc dlaczego nie można go powielić? Oczywiście pojawia się tutaj w innym kontekście, ale podstawowy problem jest taki sam? –

+0

@AamirAdnan cóż, jest to z pewnością powiązane, zgadzam się, ale nie duplikat - tylko moja opinia. – alecxe

Odpowiedz

9

powinny przesłonić cały dict:

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

Albo można użyć override_settings jako kierownik kontekstowego:

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

dzięki! Użyję twojej pierwszej metody. – WBC

+1

Zastępowanie całego dicta nie pozostawia pozostałych klawiszy nietkniętych, prawda? – Flimm

Powiązane problemy