类装饰器对象没有属性__name__

时间:2014-08-08 21:31:19

标签: python django python-2.7 python-decorators

我写了一个装饰器类,如下所示:

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' 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 :(得分:0)

我相信使用@method_decorator(ViewCounter())可以解决问题。 ViewCounter不是函数装饰器,它是一个实例是函数装饰器的类。