您無法從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的評論)下面是重定向之後顯示一個消息給用戶的一種方法。這幾乎是從我的answer逐字複製到另一個question。
您的第一個視圖可以爲當前使用的身份驗證創建消息,並讓第二個視圖讀取並刪除它。類似這樣的:
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
這個工作。
我一直在尋找即使在重定向測試方面的原因是,我使用django_notify應用,只是重定向之前,我喜歡設置一些消息: request.notifications.error(_(U「這是不是你的電子郵件或密碼不正確「)) 然後重定向回登錄表單,以便表單不會保留先前輸入的值,並且刷新也不會重新提交表單。我可以訪問通知,如果沒有重定向使用: response.context ['notifications'] 但上面的錯誤顯示出來時,有一個重定向,我只是想確保顯示的消息。或者你有更好的方法嗎? – Marconi 2010-09-01 17:32:54
@Marconi:我已經更新了我的答案。往上看。 – 2010-09-02 08:24:31