我使用Django中的RequestContext通過模板顯示用戶消息,它通過{{messages}}模板變量提供對用戶消息的訪問 - 這很方便。非破壞性地處理Django用戶消息
我想用戶他/她自己刪除郵件 - 有沒有辦法在Django中做到這一點,而不用重寫太多的代碼?不幸的是,Django會在每次請求時自動刪除消息 - 在這種情況下不是很有用。
Django的醫生說:
"Note that RequestContext calls get_and_delete_messages() behind the scenes"
將是完美的,如果有一種方法來簡單地關閉郵件自動刪除!
注:不幸的是下面的解決方案,使管理界面無法使用。我不知道如何解決這個問題,真的很煩人。
編輯 - 找到一個解決方案 - 使用自定義身份驗證上下文處理器調用user.message_set.all()作爲亞歷克斯Martelli建議。使用此解決方案,根本不需要更改應用程序代碼。 (上下文處理器是在Django內噴射變量成模板的成分。)
創建文件的myapp/context_processors.py
和在settings.py django.core.context_processors.auth
與myapp.context_processors.auth_processor
TEMPLATE_CONTEXT_PROCESSORS
元組
放入myapp/context_processors.py:
def auth_processor(request):
"""
this function is mostly copy-pasted from django.core.context_processors.auth
it does everything the same way except keeps the messages
"""
messages = None
if hasattr(request, 'user'):
user = request.user
if user.is_authenticated():
messages = user.message_set.all()
else:
from django.contrib.auth.models import AnonymousUser
user = AnonymousUser()
from django.core.context_processors import PermWrapper
return {
'user': user,
'messages': messages,
'perms': PermWrapper(user),
}
是否有一個原因,你爲什麼會想保留消息集。它用於向用戶顯示消息;一旦完成,它將被刪除。 – 2009-07-07 06:53:07
@becomingGuru我想讓肯定的用戶知道重要的信息。一個告訴他們,他們必須在他們的輸入可以發佈之前驗證電子郵件。他們仍然可以點擊小小的交叉框永久關閉該消息。 – Evgeny 2009-07-07 07:41:53