我在Django中使用RequestContext通过模板显示用户消息,它通过消息模板变量访问用户消息-这很方便。
我想要用户
他/她自己
删除这些信息-有没有一种方法可以在不重写太多代码的情况下在Django中完成它?不幸的是,Django会在每次请求时自动删除消息——在这种情况下不太有用。
Django医生说:
"Note that RequestContext calls get_and_delete_messages() behind the scenes"
如果有一种方法可以简单地关闭消息的自动删除,那就太完美了!
注:
不幸的是,下面的解决方案使
管理界面不可用
. 我不知道该怎么解决这个问题,真烦人。
编辑-找到解决方案
-使用定制的auth上下文处理器,调用alex martelli建议的user.message_set.all()。使用这个解决方案根本不需要更改应用程序代码。(上下文处理器是Django中向模板中注入变量的组件。)
创建文件myapp/context_processors.py
并在settings.py中替换
TEMPLATE_CONTEXT_PROCESSORS
元组
django.core.context_processors.auth
具有
myapp.context_processors.auth_processor
放入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),
}