2012-02-22 3 views
9

मैं एक सेटअप कुछ इस तरह लग रही है:मेरा Django देखने वाले सजावटी को अनुरोध क्यों नहीं मिला है?

def foo_decorator(function): 
    @wraps(function) 
    def decorator(*args, **kwargs): 
     print kwargs 
     return function(*args, **kwargs) 

    return decorator 

@foo_decorator 
def analytics(request, page_id, promotion_id): 
    pass 

outputting:

{'promotion_id': u'11','page_id': u'119766481432558'} 

क्यों मेरी डेकोरेटर request इसे करने के लिए पारित नहीं हो रही है?

उत्तर

22

request दृश्य के लिए कोई कीवर्ड तर्क नहीं है, यह पहला स्थितित्मक तर्क है। आप इसे args[0] के रूप में एक्सेस कर सकते हैं।

def foo_decorator(function): 
    @wraps(function) 
    def decorator(*args, **kwargs): 
     print args[0] 
     return function(*args, **kwargs) 

    return decorator 

मैं सुझाव है कि आप request स्पष्ट रूप से शामिल करने के लिए समारोह हस्ताक्षर बदलने के लिए:

def foo_decorator(function): 
    @wraps(function) 
    def decorator(request, *args, **kwargs): 
     print request 
     return function(request, *args, **kwargs) 

    return decorator 
+0

मुझे लगता है कि आप 'फ़ंक्शन' –

+0

को कॉल करते समय kwargs के सामने ** गायब हैं, धन्यवाद Patrik, अब तय है। – Alasdair

4

अनुरोध एक कीवर्ड तर्क के रूप में पारित नहीं किया गया है। यह args में है, kwargs नहीं।

+1

हा, मैं सिर्फ एक अच्छा घंटे उलझन में बिताने के बाद यह एहसास हुआ। अंततः प्रकाश बल्ब ऊपर चला गया कि 'तर्क' में ऐसी चीजें हो सकती हैं जो 'kwargs' में नहीं हैं! मेरे बारे में कितना गूंगा धन्यवाद! –

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