Я обычно работаю на машине с Ubuntu 10.04, на которой установлен python 2.6. У меня есть следующий декоратор:
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