我在Django中使用RequestContext通过模板显示用户消息,它通过{{messages}}模板变量访问用户消息,这很方便。
我想要一个用户
删除消息-有没有一种方法可以在Django中不重写太多代码的情况下删除消息?不幸的是,Django会在每次请求时自动删除消息——在这种情况下不是很有用。
Django博士说:
"Note that RequestContext calls get_and_delete_messages() behind the scenes"
如果有一种方法可以简单地关闭自动删除消息,那将是完美的!
不幸的是,下面的解决方案令人失望
. 我不知道该怎么处理这件事,真烦人。
编辑-找到解决方案
-按照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),
}