我通常在裝有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_required
和MyModel
什麼能引起問題的結果呢?我只給我的Ubuntu和Python版本,因爲我不知道還有什麼可能導致這種情況。我應該考慮哪些其他「變量」來解決這個問題?兩者都運行在virtualenv和相同的django版本1.3.1