如何使用 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
中添加消息。这是否意味着我需要覆盖comments
的views.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 的内置框架为评论添加确认消息?的主要内容,如果未能解决你的问题,请参考以下文章