2010-04-27 2 views
4

기본적으로 로그인하지 않은 사용자를 로그인 페이지로 리디렉션하려고합니다.Django : HttpResponseRedirect가 RequestContext()를 전달하지 못했습니까?

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

하지만 그 홈페이지의 URL을 잎 : 내가 현재 사용하고 무엇

이다. 나는/계정/로그인 /로 리디렉션해야하고 싶습니다,하지만 난

return HttpResponseRedirect('/accounts/login/') 

를 사용할 때 나는 그 이해

Key 'username' not found in <QueryDict: {}> 

내가 가지고해야합니까 것을 의미하는 오류를 얻을

context_instance=RequestContext(request)) 

적절한 리디렉션이 있고 RequestContext를 계속 전달합니까?

답변

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를 사용하여 사용자 이름과 비밀번호가 일반 텍스트로 기록되지 않도록해야합니다.

+0

답장을 보내 주셔서 감사합니다. 내 문제는 오히려 어리 석고 위에 게시 한 것과 아무 상관이 없음을 깨달았습니다. 내 로그인보기에서 context_instance를 전달하는 것을 잊어 버렸습니다 ... 그러나 귀하의 의견은 실제로 다른 곳에서 도움을주었습니다. –

+1

@Stone csrf 토큰의 경우 requestcontext가 필요할 수 있습니다. https://docs.djangoproject.com/en/dev/ref/contrib/csrf/. 따라서 Httpresponsirectirect 뷰가 요청 컨텍스트를 사용하지 않는 동안. 그게 문제가되지 않겠습니까? –

+0

나는 아약스 요청을 사용하고 성공에 대한 잘못된 응답과 render_to_response를 표시하는 json에 대한 실패시 리디렉션을 보냈습니다. 오류는 정상적으로 작동하지만 같은 페이지에서 render_to_response에 의해 보내지는 템플릿을 확인하고 있습니다 ... 어떻게 대처할 수 있니? – cafebabe1991

관련 문제