如何使用 Django 的内置框架为评论添加确认消息?

Posted

技术标签:

【中文标题】如何使用 Django 的内置框架为评论添加确认消息?【英文标题】:How to add a confirmation message for comments using both Django's built-in framework? 【发布时间】:2012-04-11 12:30:26 【问题描述】:

我想创建一条简单的消息“您的评论已发布!”使用 Django 的 messages 框架。我正在使用 Django 的 comments 框架并对其进行设置,以便在发布评论后刷新页面

<div><input type="hidden" name="next" value=" request.get_full_path " /></div>

在我创建的 form.html 内部,用于覆盖 comments 的默认值。我还必须在我的settings.py 中包含django.core.context_processors.request for TEMPLATE_CONTEXT_PROCESSORS

无论如何,messages documentation 表示要在views.py 中添加消息。这是否意味着我需要覆盖commentsviews.py 或者有更简单的方法可以做到这一点?修改comments 的源代码我有点不舒服。如果必须,我什至不确定在哪里添加该行

 messages.add_message( request, messages.SUCCESS, 'You comment has been posted!' )

django.contrib.comments.views.comments 中的def post_comment() 下。

【问题讨论】:

【参考方案1】:

您可以connect a custom receiver 到comment_was_posted signal。它可能看起来像这样:

from django.contrib.comments.signals import comment_was_posted

def thank_user(sender, comment=None, request=None, **kwargs):
    messages.add_message( request, messages.SUCCESS, 'You comment has been posted!' )
comment_was_posted.connect(thank_user)

这样一个 sn-p 的好地方是 project_specific models.py,因为它们都是在模型定义时导入的。

【讨论】:

【参考方案2】:

秘密在于,当发表评论时,cmets 应用程序会发送一个信号。所以设置一个接收器来处理comment_was_posted(或comment_will_by_posted)信号。在接收方调用messages.add_message(...)

这方面的文档是: https://docs.djangoproject.com/en/1.4/ref/contrib/comments/signals/#module-django.contrib.comments.signals

https://docs.djangoproject.com/en/1.4/topics/signals/

【讨论】:

以上是关于如何使用 Django 的内置框架为评论添加确认消息?的主要内容,如果未能解决你的问题,请参考以下文章

Django 自带comment评论库使用

如何在 Django 中添加对评论的回复?

Django评论垃圾邮件

将不在模型中的字段添加到 Django REST 框架中的序列化程序

如何在Django休息框架中验证用户?

为 django 评论表单分配唯一 ID