【发布时间】:2012-01-18 23:20:28
【问题描述】:
我通常在安装了 python 2.6 的 Ubuntu 10.04 机器上工作。我有以下装饰器:
def owner_required(view_func, Model):
'''
checks if the object is being accessed but its owner
'''
def decorator(view_func):
@wraps(view_func, assigned=available_attrs(view_func))
def _wrapped_view(request, *args, **kwargs):
obj = Model.objects.get(pk=int(kwargs['pk']))
if obj.user == request.user:
return view_func(request, *args, **kwargs)
return HttpResponse('Forbidden')
return _wrapped_view
return decorator(view_func)
在同一台机器上一切正常。
当我尝试在装有 Ubuntu 11.10 和 python 2.7.2 的笔记本电脑上运行它时出现问题。
无论我尝试访问哪个页面,我都会收到以下错误:
TypeError: owner_required() takes exactly 1 argument (2 given)
在我的 myapp/urls.py 中,我有以下行,这导致了错误:
url(r'^(?P<pk>\d+)/$', name = 'my_view', \
view = owner_required(login_required(\
DetailView.as_view(model=MyModel,\
template_name='myapp/view.html')),MyModel))
所以,owner_required 正在接收 2 个参数:login_required 和 MyModel 的结果
什么可能导致问题?我只提供我的 ubuntu 和 python 版本,因为我不知道还有什么可能导致这种情况。我应该看哪些其他“变量”来解决这个问题?两者都在 virtualenv 和相同的 django 版本 1.3.1 下运行
【问题讨论】:
标签: django arguments decorator