为什么我的Django视图装饰器没有将请求传递给它?

2024-04-29 09:48:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的装置:

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'}

为什么我的装饰器没有被传递给它?


Tags: idreturnfoorequestdefpageargsfunction
2条回答

请求未作为关键字参数传递。它在args,而不是kwargs

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

相关问题 更多 >