Skip to main content
 首页 » 编程设计

python之具有基于类的 View 的装饰器

2025年05月04日13mayingbao

你好,我有一个基于类的 View ,我想用一些函数来装饰它的调度方法,这样我就可以在 args/kwargs 的基础上执行一些有用的事情。 基于类的 View 代码如下:

from django.utils.decorators import method_decorator 
class ProjectDetailView(FormMixin, DetailView): 
    template_name = 'account/inner-profile-page.html' 
    model = ProjectDetail 
    form_class = CommentForm  
    context_object_name = 'project' 
 
    @method_decorator(view_count) 
    def dispatch(self, *args, **kwargs): 
        return super(ProjectDetailView,self).dispatch(*args, **kwargs) 
 
    def get_object(self, queryset=None): 
        user = User.objects.get(user_slug=self.kwargs['user_slug']) 
        title_slug = self.kwargs['title_slug'].replace(' ','-') 
        return get_object_or_404(ProjectDetail, title_slug = title_slug, user=user) 

我的简化装饰器看起来像这样:

def view_count(func): 
    def actual_decorator(*args, **kwargs): 
        #do something useful here 
        func(*args, **kwargs) 
    return actual_decorator 

结果是“ProjectDetailView didn't return an HttpResponse object”。我哪里出错了,我应该怎么做,我知道这很简单,但这是我第一个做任何有用的装饰器!

请您参考如下方法:

您缺少一个返回:

def actual_decorator(*args, **kwargs):  
    #do something useful here  
    return func(*args, **kwargs)