Django自定义装饰器重定向问题

时间:2011-07-29 14:46:02

标签: django redirect decorator

我尝试在Django中编写自定义装饰器。 我想将用户重定向到自定义登录页面,如果他们没有通过该页面登录。 我编写了装饰器并调试了它。虽然用户未登录时效果很好,但在用户登录后会出现错误

The view APPNAME.views.home didn't return an HttpResponse object.

您可以在下面找到我的代码。为什么我的装饰者只需在私人alfa页面中进行身份验证后跳转到return wraps(func)(inner_decorator)部分?

由于

def private_alfa_required():    
def decorator(func):
    def inner_decorator(request,*args, **kwargs):
        if 'isPrivateAlfaUser' not in request.session or request.session['isPrivateAlfaUser'] != True:
            return render_to_response('homepage.html') 

    return wraps(func)(inner_decorator)

return decorator

@private_alfa_required()
def home(request):
 .....



def home2(request):
  .....

2 个答案:

答案 0 :(得分:4)

因为如果测试成功,你实际上没有调用视图函数。

if 'isPrivateAlfaUser' not in request.session or request.session['isPrivateAlfaUser'] != True:
    return render_to_response('homepage.html') 
else:
    return func(request, *args, **kwargs)

作为辅助说明,此处不需要外层包装器,因为装饰器不带任何参数。如果删除它,还需要将()放在装饰器本身上。

答案 1 :(得分:0)

您需要传递上下文以呈现回复

return render_to_response('homepage.html', context_instance=RequestContext(request))

或渲染到响应将无法正常工作