我通常在安装了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下运行
答案 0 :(得分:1)
你可能已经尝试过这个,但只是想问一下。当旧的编译视图缓存在服务器中时,我曾经得到类似的错误,尤其是在一些编辑之后,我只需要重新启动服务器。
答案 1 :(得分:0)
要确定使用了owner_required
的版本,您可以检查func_code
属性。
例如,放在 /media/projects/blablabla/apps/common/utils.py 中的本地计算机login_required
上:
login_required.func_code
# <code object login_required at 0x1e75f30, file "/media/projects/blablabla/apps/common/utils.py", line 102>
希望这有帮助)