Django:HttpResponseRedirect没有通过RequestContext()?

Dan*_*sen 4 django http

基本上,我正在尝试将未登录的人重定向到登录页面.

我目前使用的是:

return render_to_response('login.html', context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)

但这留下了主页上的网址.我想将它重定向到/ accounts/login /,但是当我使用它时

return HttpResponseRedirect('/accounts/login/')
Run Code Online (Sandbox Code Playgroud)

我收到了错误

Key 'username' not found in <QueryDict: {}>
Run Code Online (Sandbox Code Playgroud)

我明白这意味着我确实需要

context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)

反正有没有正确的重定向,仍然传递RequestContext?

T. *_*one 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:
        # ...
Run Code Online (Sandbox Code Playgroud)

(请注意,我假设您要保留用户名的原因是将其预先填充到登录表单中.如果您正在执行实际登录,则需要使用POST而不是用户名和密码不在URL中以纯文本格式记录).