2

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

有两个问题

  1. 我想为delete button发布的每条评论提供一个,我不想将用户重定向到另一个页面。我只想通过确认消息删除评论。我没有找到任何文档告诉我如何在django comments framework
  2. 如果有一个error while submitting the comment form,用户是redirected to the preview page(也处理错误),我不想要这个。我希望用户被重定向到同一页面,并出现相应的错误。我该怎么做。

任何帮助或方向表示赞赏

4

2 回答 2

4

Timmy 的视图代码片段仍然缺少一个导入语句并且没有返回响应。这是相同的代码,更新到现在外部的 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:

 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 %}
于 2014-04-05T19:15:36.083 回答
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 %}

对于第二个问题,您可以看到如果有错误,重定向总是会发生(即使设置了 preview=False )。没有太多的解决方法。您可以创建自己的视图来包装post_comment视图(或者只编写自己的 post_comment 而无需重定向)

于 2012-01-07T21:10:36.120 回答