可重用的Django全站公告应用,仅对每个用户显示一次消息

0 投票
2 回答
1373 浏览
提问于 2025-04-15 16:35

我想在我的Django应用中,只给注册用户显示一些消息,而且每条消息只显示一次。我发现了一个叫django-announcements的工具,看起来可以满足我的需求。不过我在测试的时候发现,它是通过一个会话变量来标记消息为已读的,而这个会话变量在用户登出后就会消失。这就意味着,如果用户在登录状态下关闭了某条消息,然后登出再重新登录,这条消息又会重新显示给他们。

我在想,是否有人知道有什么应用可以解决这个问题,而不需要我自己重新发明轮子。

2 个回答

0

你有没有看过Django 1.3中的消息框架?在Django 1.2及之前的版本中,它是一个简单的模型,你可以这样做:

for user in User.objects.all():
    user.message_set.create(message="some text")

这样做后,消息会在模板中显示,并且在加载下一个页面时会自动消失(这就是Django后台管理界面使用的方式)。在1.3版本中,它有了一些变化,可能会对你有帮助,但可能不是你想要的那种“自动消失”的效果。

3

你可以看看django-notification这个项目。它被pinax使用,似乎能满足你所需要的功能。至少它可以把状态保存到数据库里。

编辑

这是对评论的回复

来自文档的内容:

notification.send([to_user], "friends_invite", {"from_user": from_user})

所以这个应该可以用:

notification.send(Users.objects.all(), "friends_invite", {"from_user": from_user})

如果查询结果不对的话:

notification.send([u for u in Users.objects.all()], "friends_invite", {"from_user": from_user})

撰写回答