2012-01-18 49 views
1

我通常在装有python 2.6的Ubuntu 10.04机器上工作。我有以下装饰器:Django:在特定设置下在装饰器中获取参数错误

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_requiredMyModel

什么能引起问题的结果呢?我只给我的Ubuntu和Python版本,因为我不知道还有什么可能导致这种情况。我应该考虑哪些其他“变量”来解决这个问题?两者都运行在virtualenv和相同的django版本1.3.1

回答

1

你可能试过这个,但只是想问。当旧的编译视图被缓存在服务器中时,我经常会遇到类似的错误,尤其是在编辑之后,我只需重新启动服务器即可。

0

要找出owner_required的版本已被使用,您可以检查它的func_code属性。

例如我的本地机器上login_required放在/media/projects/blablabla/apps/common/utils.py

login_required.func_code 
# <code object login_required at 0x1e75f30, file "/media/projects/blablabla/apps/common/utils.py", line 102> 

希望这有助于)