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

发布于 2025-01-08 01:25:34 字数 428 浏览 0 评论 0原文

我有一个看起来像这样的设置:

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 传递给它?

I have a setup looking something like this:

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

Why is my decorator not getting request passed to it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

氛圍 2025-01-15 01:25:34

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

request isn't a keyword argument to the view, it's the first positional argument. You can access it as args[0].

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

    return decorator

I would recommend that you change the function signature to include request explicitly:

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

    return decorator
冰火雁神 2025-01-15 01:25:34

该请求不作为关键字参数传递。它位于 args 中,而不是 kwargs 中。

The request is not passed as a keyword argument. It's in args, not kwargs.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文