社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

非破坏性处理django用户消息

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

我在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
 
1461 次点击  
文章 [ 1 ]  |  最新文章 6 年前
Alex Martelli
Reply   •   1 楼
Alex Martelli    16 年前

我知道这听起来很奇怪,但你可以复制到你自己的列表中

request.user.message_set.all()

在实例化requestContext之前,稍后将它们放回..