基本上,我正在尝试将未登录的人重定向到登录页面。
我目前使用的是:
return render_to_response('login.html', context_instance=RequestContext(request))
但是这会留下主页上的网址。我想将它重定向到/ accounts / login /,但是当我使用
时return HttpResponseRedirect('/accounts/login/')
我收到错误
Key 'username' not found in <QueryDict: {}>
我理解这意味着我做需要
context_instance=RequestContext(request))
无论如何都有正确的重定向,仍然沿着RequestContext传递?
答案 0 :(得分:5)
RequestContext
仅用于在呈现模板时将值传递给模板引擎。目标视图不应该依赖于原始视图中的RequestContext
,它应该能够生成它自己的RequestContext。
但是有些情况下你需要在这样的视图之间传递值。在这些情况下,您可以使用查询字符串值来执行此操作。例如......
def originating_view(request, *args, **kwargs):
return HttpResponseRedirect('/accounts/login/?username=%s&next=%s' % (username, request.path)
def destination_view(request, *args, **kwargs):
# Get the username from the querystring
username = request.GET.get('username', None)
next = request.GET.get('next', '/')
if username:
# ...
(请注意,我假设您要保留用户名的原因是将其预填充到登录表单中。如果您正在执行实际登录,则需要使用POST代替因此用户名和密码不会以明文形式记录在URL中。