Django: HttpResponseRedirect не передает RequestContext ()? - PullRequest
4 голосов
/ 27 апреля 2010

По сути, я пытаюсь перенаправить людей, которые не вошли на страницу входа.

В настоящее время я использую:

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

Но это оставляет URL на главной странице. Я бы хотел, чтобы он перенаправлялся в / account / login /, но когда я использую

return HttpResponseRedirect('/accounts/login/')

Я получаю ошибку

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

Я понимаю, что для того, чтобы сделать нужно иметь

context_instance=RequestContext(request))

Есть ли в любом случае правильное перенаправление и при этом передача RequestContext вместе?

1 Ответ

5 голосов
/ 27 апреля 2010

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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...