Py学习  »  Django

非破坏性处理django用户消息

Chris B. Behrens • 6 年前 • 1464 次点击  

我在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),
    }
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30686
 
1464 次点击  
文章 [ 1 ]  |  最新文章 6 年前