如何在注释框架中为django提供删除按钮

时间:2012-01-07 18:07:53

标签: django django-apps django-comments

我正在使用django评论框架。它说它提供了很多功能,我也可以在源文件中看到有各种选项,但文档有点差。

有两个问题

  1. 我想为发布的每条评论提供delete button,我不想将用户重定向到其他页面。我只想删除评论并附上确认消息。我没有找到任何文档告诉我如何在django comments framework
  2. 中执行此操作
  3. 如果有error while submitting the comment form,则用户为redirected to the preview page(也处理错误),我不希望这样。我希望将用户重定向到同一页面,并显示相应的错误。我怎么能这样做呢。
  4. 感谢任何帮助或指示

2 个答案:

答案 0 :(得分:3)

该视图的Timmy代码片段仍然缺少一个import语句,并且没有返回响应。这是相同的代码,更新到现在的外部django_comments应用程序(django 1.6 +):

from django.shortcuts import get_object_or_404
import django.http as http
from django_comments.views.moderation import perform_delete
from django_comments.models import Comment

def delete_own_comment(request, id):
    comment = get_object_or_404(Comment, id=id)
    if comment.user.id != request.user.id:
        raise Http404
    perform_delete(request, comment)
    return http.HttpResponseRedirect(comment.content_object.get_absolute_url())

这会在没有任何消息的情况下重新指向原始页面(但可能会减少一条评论)。

注册此视图的网址:

 url(r'^comments/delete_own/(?P<id>.*)/$', delete_own_comment, name='delete_own_comment'),

然后直接修改comments / list.html以包含:

{% if user.is_authenticated and comment.user == user %}
   <a href="{% url 'delete_own_comment' comment.id %}">--delete this comment--</a>
{% endif %}

答案 1 :(得分:2)

已有评论的删除视图,但它是审核系统的一部分。您需要允许所有用户can_moderate权限,这显然允许他们删除他们想要的任何评论(不仅仅是他们的评论)。您可以快速编写自己的视图,检查他们正在删除的评论是否属于他们:

from django.shortcuts import get_object_or_404
from django.contrib.comments.view.moderate import perform_delete
def delete_own_comment(request, comment_id):
    comment = get_object_or_404(Comment, id=comment_id)
    if comment.user.id != request.user.id:
        raise Http404
    perform_delete(request, comment)

并在您的模板中

{% for comment in ... %}
{% if user.is_authenticated and comment.user == user %}
    {% url path.to.view.delete_comment comment_id=comment.id as delete_url %}
    <a href="{{ delete_url }}">delete your comment</a>
{% endif %}
{% endfor %}

对于第二个问题,you can see that the redirection will always happen if there are errors(即使设置了preview = False)。没有太多变通办法。你可以创建自己的视图来包装post_comment视图(或者只是在没有重定向的情况下编写你自己的post_comment)