Đây là những gì tôi làm, sử dụng bộ vi xử lý ngữ cảnh:
project/application/context.py
(kiểm tra thư và thêm chúng vào bối cảnh):
def messages(request):
messages = {}
if 'message' in request.session:
message_type = request.session.get('message_type', 'error')
messages = {'message': request.session['message'],
'message_type': message_type}
del request.session['message']
if 'message_type' in request.session:
del request.session['message_type']
return messages
project/settings.py
(thêm bối cảnh cho TEMPLATE_CONTEXT_PROCESSORS
):
TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.request",
"django.core.context_processors.debug",
"django.core.context_processors.media",
"django.core.context_processors.auth",
"project.application.context.messages",
)
Với chức năng ở trên messages
sẽ được gọi theo mọi yêu cầu và bất kỳ thứ gì mà nó làm lại rns sẽ được thêm vào ngữ cảnh của khuôn mẫu. Với điều này tại chỗ, nếu tôi muốn cung cấp cho người dùng một thông điệp, tôi có thể làm điều này:
def my_view(request):
if someCondition:
request.session['message'] = 'Some Error Message'
Cuối cùng, trong một mẫu mà bạn chỉ có thể kiểm tra nếu có sai sót để hiển thị:
{% if message %}
<div id="system_message" class="{{ message_type }}">
{{ message }}
</div>
{% endif %}
Loại tin nhắn chỉ được sử dụng để tạo kiểu tùy thuộc vào nó là gì ("lỗi", "thông báo", "thành công") và cách thiết lập này bạn chỉ có thể thêm 1 tin nhắn cùng một lúc cho người dùng, nhưng đó là tất cả Tôi thực sự cần vì vậy nó hoạt động cho tôi. Nó có thể dễ dàng thay đổi để cho phép nhiều tin nhắn và như vậy.
Nguồn
2009-03-30 20:45:38
tiếc là django_session_messages sẽ không hoạt động với django.core.context_processors.auth xóa tất cả thư của người dùng trước khi mã trong bản vá này sẽ chạy. Có lẽ người ta có thể xem xét lại làm toàn bộ hệ thống tin nhắn trong django. – Evgeny
nếu bạn lật thứ tự của hai bộ xử lý ngữ cảnh trong cài đặt, thứ hai sẽ ghi đè lên danh sách thư, vì vậy nó sẽ không giúp ích gì. – Evgeny