异常"函数"对象没有属性"get"由自定义装饰器在 django 中触发



在基于 django 的项目中,我有一个带有自定义装饰器的视图:

@login_required
@user_is_project_maintainer
def edit(request, project_key):
   ... 

和实际的自定义装饰器本身:

def user_is_project_maintainer(request):
    def decorator(view_func, *args, **kwargs):
        @wraps(view_func, assigned=available_attrs(view_func))
        def _wrapped_view(request, project_key, *args, **kwargs):
            project = get_object_or_404(Project, key=project_key)
            if (project.maintainer_id != request.user.id) :
                return HttpResponseRedirect(reverse('kifos.views.index', args=(project.key,)))
            else :
                view_func(request, *args, **kwargs)
        return _wrapped_view
    return decorator

这导致了 django 本身深处'function' object has no attribute 'get'异常(在 /django/core/handlers/base.py line 188 年)。不知道为什么会这样。有什么想法吗?

这看起来像是一个过于复杂(可能被破坏)的装饰器实现......这个怎么样:

def user_is_project_maintainer(view):
    @wraps(view)
    def _wrapped_view(request, project_key, *args, **kwargs):
        project = get_object_or_404(Project, key=project_key)
        if (project.maintainer_id != request.user.id) :
            return HttpResponseRedirect(reverse('kifos.views.index', args=(project.key,)))
        else :
            view(request, project, *args, **kwargs)
    return _wrapped_view

请注意,您的"编辑"视图现在会自动将项目作为其第二个参数,因此您可以将其更改为:

def edit(request, project):
    #can do stuff with project object in here

最新更新