Вы не можете получить переменные контекста из HttpResponseRedirect
. Не имеет смысла устанавливать контекстные переменные, если вы все равно перенаправляете.
Вы, безусловно, должны иметь возможность выбирать переменные из сеанса после перенаправления. Я сделал это в нескольких моих тестовых случаях. Как вы утверждаете данные сеанса в тестовом примере?
Вот как я утверждаю переменные сеанса после перенаправления:
response = self.client.post(reverse('foo'))
self.assertRedirects(response, reverse('bar', args = ['baz']),
status_code = 302, target_status_code = 200)
self.assertEqual('value', self.client.session.get('key'))
Self.client
в данном случае является экземпляром django.test.client.Client
.
Обновление
(В ответ на комментарий @ Marconi ) Вот один из способов отображения сообщения пользователю после перенаправления. Это почти дословно скопировано из моего ответа в другой вопрос .
Ваш первый просмотр может создать сообщение для текущего с использованием аутентификации, а второй просмотр прочитает и удалит его. Примерно так:
def first_view(request, *args, **kwargs):
# all goes well
message = _("<message for user>")
request.user.message_set.create(message = message)
return redirect('second_view')
def second_view(request, *args, **kwargs):
# Render page
# Template for second_view:
{% for message in messages %}
...
{% endfor %}
Сообщения сохраняются в базе данных. Это означает, что вы можете получить к ним доступ даже после перенаправления. Они автоматически читаются и удаляются при рендеринге шаблона. Вам нужно будет использовать RequestContext
, чтобы это работало.