基于类的视图的 Django 装饰器属性错误
Posted
技术标签:
【中文标题】基于类的视图的 Django 装饰器属性错误【英文标题】:Django Decorator Attribute Error for Class Based Views 【发布时间】:2014-01-21 16:07:38 【问题描述】:我正在尝试在我的 Django 应用程序中的几个基于类的视图的调度方法上使用装饰器。这是我尝试的一个示例视图:
class DashboardView(TemplateView):
template_name="omninectar/dashboard.html"
def get_context_data(self, **kwargs):
....
@active_and_login_required
def dispatch(self, *args, **kwargs):
return super(DashboardView, self).dispatch(*args, **kwargs)
使用以下装饰器:
active_required = user_passes_test(lambda u: u.is_active)
def active_and_login_required(view_func):
decorated_view_func = login_required(active_required(view_func))
return decorated_view_func
这让我得到以下错误:
AttributeError at /dashboard/
'DashboardView' object has no attribute 'user'
如何让装饰器使用此视图检索当前用户?
【问题讨论】:
你能把整个DashboardView
贴出来吗?问题可能不在您发布的代码中。
相关:***.com/questions/6069070/…
【参考方案1】:
您可以像这样使用django.utils.decorators.method_decorator
将旧式装饰器转换为方法装饰器:
from django.utils.decorators import method_decorator
...
class DashboardView(TemplateView):
template_name="omninectar/dashboard.html"
def get_context_data(self, **kwargs):
....
@method_decorator(active_and_login_required)
def dispatch(self, *args, **kwargs):
return super(DashboardView, self).dispatch(*args, **kwargs)
相关文档在这里:Introduction to Class-based Views
【讨论】:
感谢您的回答。我知道我忘记了一些简单的事情。以上是关于基于类的视图的 Django 装饰器属性错误的主要内容,如果未能解决你的问题,请参考以下文章