2012-01-18 50 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> 

希望這有助於)