如何制作 django 消息 *** 样式?
Posted
技术标签:
【中文标题】如何制作 django 消息 *** 样式?【英文标题】:How to make django messages *** style? 【发布时间】:2011-03-05 19:37:49 【问题描述】:我想使用 Django 的消息模块,但是,我希望我的消息一直存在,直到用户单击消息旁边的 X,而不是在用户重新加载页面后消息消失。
我被两个问题难住了: 如何让消息的上下文处理器在消息被访问后不删除消息? 一旦用户单击“删除”按钮(调用 ajax 调用),我以后如何从数据库中显式删除消息?
谢谢!
【问题讨论】:
【参考方案1】:自 2010 年底以来,图书馆 django-persistent-messages 就是为了实现这一目标。它有很好的文档记录,可以很好地创建一个 Stack Overflow 风格的消息系统。
它还集成了内置的Django消息系统,所以代码改动相对较小,对于不需要持久化的消息仍然可以使用原系统。
【讨论】:
【参考方案2】:在您的情况下,django.contrib.messages
不会给您带来任何好处。这是一个受 RoR flash 系统启发的消息系统,消息不应该一直存在
您应该创建自己的消息系统(可能是 django-persistent-messages?),它将注册用户的消息保存在数据库中。
实现起来是一项相当简单的任务 User 上有外键的模型 在模板中提供消息的上下文处理器 使用消息的视图 可能是创建消息的辅助函数如果您这样做,请不要忘记将其提供给其他人 =)
【讨论】:
目前有 5 个应用程序提供一些消息通知功能:code.djangoproject.com/wiki/SessionMessages 感谢@Guillaume Esquevin,这似乎是与用户而不是会话相关的消息的最佳方法。 一个新手问题——为什么我需要一个中间件类?据我所知,context_processor 完成了所有挂钩工作还是我错了? 你是对的,那里不需要中间件,你可以简单地在上下文处理器中获取用户的消息。只有临时消息才需要中间件来实例化一个数组来放入消息。我将编辑我的帖子。【参考方案3】:从 1.2 开始,Django 有了一个新的消息框架——django.contrib.messages
——现在完全脱离了auth
模块并提供了更多功能。例如,它提供了一种处理expiration of messages 的基本方法。
您还可以查看django-cnotes 应用程序,它提供了一个简单的基于 cookie 的用户通知系统。将常量CNOTES_AUTO_CLEAR
设置为False
可防止自动清除注释。
还有django-notices,这是内置消息通知系统的另一个替代品。它没有魔法,但提供了一个优雅而简单的 API。
【讨论】:
是否有任何与用户模块相关的替代品?即,我希望消息始终为用户显示,而不是绑定到特定会话。【参考方案4】:Django 消息似乎是一个很好的起点,但需要扭曲才能到达您想去的地方,而且我不相信 Django 的未来版本不会破坏您的 hack。
从长远来看,实现您自己的 UserMessage 模型可能会为您提供更好的服务。这使您可以完全、明确地控制消息生命周期。它也可能是一个不错的可重用应用程序。
【讨论】:
从 1.2 开始,Django 除了旧的 API 之外还有一个新的消息框架。它与任何其他 contrib 组件一样稳定。以上是关于如何制作 django 消息 *** 样式?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django 中使用反向工作来制作 *** 样式的 URL,以允许 slug 更改?