类装饰器对象没有属性 __name__
我写了一个装饰器类,内容如下:
import functools
class ViewCounter(object):
def __init__(self,user_slug=None):
self.user_slug = user_slug
def __call__(self, func):
@functools.wraps(func)
def wrapped_func(*args, **kwargs):
return func(*args,**kwargs)
return wrapped_func
我把这个装饰器应用到了我用Django写的一个基于类的视图上,方法是使用了Django的method_decorator
,像这样:
class ProjectPage(DetailView):
template_name = 'account/profile-page-latest.html'
model = User
context_object_name = 'user_obj'
@method_decorator(ViewCounter)
def dispatch(self, *args, **kwargs):
return super(ProjectPage, self).dispatch(*args, **kwargs)
但是在我的控制台中出现了这个错误:
AttributeError: 'ViewCounter' object has no attribute '__name__'
1 个回答
0
我觉得使用 @method_decorator(ViewCounter())
应该能解决这个问题。ViewCounter
不是一个普通的函数装饰器,而是一个类,这个类的实例可以作为函数装饰器使用。