gpt4 book ai didi

python - wrapper() 得到了一个意外的关键字参数 'id'

转载 作者:行者123 更新时间:2023-11-28 17:10:14 25 4
gpt4 key购买 nike

我有 wiev 函数:

@login_required
def index(request):

@login_required
def detail(request, id):

装饰器:

@decorator
def login_required(wiev_function, request, *args, **kwargs):
print(args)
print(kwargs)
if not request.user.is_authenticated():
return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
return wiev_function(request, *args, **kwargs)

“index”功能正常,但“detail”功能出错:

TypeError: wrapper() got an unexpected keyword argument 'id'

附言id 参数在 url 模式中

urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^new/(?P<id>\d+)/$', views.new, name = 'new'),

最佳答案

这不是你编写装饰器的方式。装饰器是返回另一个函数的函数;该内部函数必须执行一些逻辑并(可选)调用装饰函数。外部函数本身不接受传递给原始函数的参数;内部函数。

def login_required(view_function):
def inner(request, *args, **kwargs):
print(args)
print(kwargs)
if not request.user.is_authenticated():
return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
return view_function(request, *args, **kwargs)
return inner

然而,所有这些似乎毫无意义,因为 Django 已经提供了一个 login_required decorator .

关于python - wrapper() 得到了一个意外的关键字参数 'id',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48097400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com