2014-06-13 3 views
6

मैं अजगर सज्जाकार के लिए नया हूँ तो शायद मैं कुछ सरल याद आ रही है, यहाँ मेरी स्थिति है: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

@ आमिर अदनन अच्छी तरह से, यह निश्चित रूप से संबंधित है, मैं सहमत हूं, लेकिन डुप्लिकेट नहीं - बस मेरी राय। – alecxe

उत्तर

9

आप पूरी dict ओवरराइड करना चाहिए:

@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

संबंधित मुद्दे