【问题标题】:How to add a confirmation message for comments using both Django's built-in framework?如何使用 Django 的内置框架为评论添加确认消息?
【发布时间】: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() 下。

【问题讨论】:

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


    【解决方案1】:

    您可以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)
    

    这样一个 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/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-21
        • 2012-02-05
        • 2016-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多