Bạn không thể truy xuất biến ngữ cảnh từ HttpResponseRedirect
. Nó không có ý nghĩa tại sao bạn đang thiết lập các biến ngữ cảnh nếu bạn đang chuyển hướng anyway.
Bạn chắc chắn sẽ có thể nhận các biến từ phiên sau khi chuyển hướng. Tôi đã làm điều này trong một số trường hợp thử nghiệm của tôi. Bạn xác nhận dữ liệu phiên trong trường hợp thử nghiệm của mình như thế nào?
Đây là cách tôi đi về khẳng định các biến session sau khi chuyển hướng:
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
là một thể hiện của django.test.client.Client
trong trường hợp này.
Cập nhật
(Đáp lại bình luận @Marconi 's) Dưới đây là một cách để hiển thị một thông điệp tới người dùng sau khi chuyển hướng. Điều này được sao chép gần như nguyên văn từ answer của tôi sang một số khác question.
Chế độ xem đầu tiên của bạn có thể tạo thông báo cho auth sử dụng hiện tại và có chế độ xem thứ hai đọc và xóa nó. Một cái gì đó như thế này:
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 %}
Tin nhắn được lưu vào cơ sở dữ liệu. Điều này có nghĩa là bạn có thể truy cập chúng ngay cả sau khi chuyển hướng. Chúng được tự động đọc và xóa khi hiển thị mẫu. Bạn sẽ phải sử dụng RequestContext
để làm việc này.
Nguồn
2010-09-01 16:12:14
Lý do tôi đang tìm cách kiểm tra ngữ cảnh ngay cả khi chuyển hướng là tôi đang sử dụng ứng dụng django_notify và ngay trước khi chuyển hướng, tôi đặt một số thông báo như: request.notifications.error (_ (u "Đó là email của bạn hoặc mật khẩu không chính xác ")) và sau đó chuyển hướng trở lại biểu mẫu đăng nhập để biểu mẫu không giữ lại các giá trị đã nhập trước đây và cũng làm mới không gửi lại biểu mẫu. Tôi có thể truy cập thông báo nếu không có chuyển hướng bằng cách sử dụng: response.context ['notifications'] Nhưng lỗi ở trên xuất hiện khi có chuyển hướng, tôi chỉ muốn đảm bảo rằng thông báo được hiển thị. Hay bạn có cách nào tốt hơn? – Marconi
@Marconi: Tôi đã cập nhật câu trả lời của mình. Xem ở trên. –