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

时间:2012-03-27 22:28:21

标签: python django django-templates django-template-filters

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

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

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

无论如何,messages documentation说要在views.py内添加消息。这是否意味着我需要覆盖comments的{​​{1}}或者是否有更简单的方法来执行此操作?修改views.py的源代码我有点不舒服。如果必须,我甚至不确定在哪里添加行

comments
messages.add_message( request, messages.SUCCESS, 'You comment has been posted!' ) 的{​​{1}}下

2 个答案:

答案 0 :(得分:3)

秘诀是,在发表评论时,评论应用会发送信号。因此,设置一个接收器来处理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/

答案 1 :(得分:3)

您可以connect a custom receivercomment_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)

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