2012-02-22 2 views
9

은 내가 설치는 다음과 같이보고했다 :장고 뷰 데코레이터가 요청을 전달하지 않는 이유는 무엇입니까?

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 

출력하기 :

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

왜 내 장식이 전달 request을 받고되지 않는 이유는 무엇입니까?

답변

22

은 뷰에 대한 키워드 인수가 아니며, 첫 번째 위치 인수입니다. 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

'함수'를 호출 할 때 kwargs 앞에 ** 빠져 있다고 생각합니다 –

+0

감사합니다. Patrik, 지금 고쳐주세요. – Alasdair

4

요청이 키워드 인수로 전달되지 않습니다. 그것은 args이 아니며 kwargs이 아닙니다.

+1

하 석, 방금 혼란 좋은 시간을 보낸 이후이 문제를 깨달았다. 마침내'argws'는'kwargs'에없는 것을 포함 할 수있는 전구가 올라갔습니다! 나 한테 얼마나 바보 야. 감사! –

관련 문제