我尝试在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):
.....
答案 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))
或渲染到响应将无法正常工作