删除帖子评论:尝试删除帖子评论时,NoReverseMatch

时间:2020-05-02 11:08:25

标签: python html django django-class-based-views

我对django和Web开发非常陌生,试图删除帖子中的评论,并提供了基于类的视图,但是在运行代码时遇到此错误。

Reverse for 'delete_comment' with no arguments not found. 1 pattern(s) tried: ['posts/(?P<slug>[^/]+)/(?P<comment_id>[0-9]+)/delete/$']

我在下面提供了评论部分,您可以找到最后一个的删除部分。

comment-section.html

            {{ comments.count }} Comment{{ comments|pluralize }}
        {% for comment in comments %}
        <blockquote class="blockquote">
        <img style="float:left; clear: left;" class="rounded-circle article-img" height="50" width="50" src="{{ comment.user.profile.profile_pic.url }}"><a href="" style="text-decoration: none; color: black;"><h6>{{ comment.user.first_name|capfirst }} {{ comment.user.last_name|capfirst }}</h6></a><br>
        <p style="font-size: 8px;">{{ comment.timestamp }}</p>
        <p style="font-size: 14px;" class="mb-3">{{ comment.content }}</p>
        <a  type="button" name="button" class="reply-btn ml-4"><p style="font-size: 13px;"> Reply</p></a>
        {% if request.user == comment.user %}
        <a href="{% url 'posts:delete_comment' comment.id %}" style="font-size: 13px;text-decoration: none; color: #000;" hover="background-color:red">Delete</a></td>
        {% endif %}

views.py

class DeleteCommentView(BSModalDeleteView, LoginRequiredMixin, UserPassesTestMixin):
    model = Comment
    template_name = 'posts/comment_delete.html'
    success_message = 'Deleted'

    def get_success_url(self):
       return reverse_lazy('posts:detail_post')

    def test_func(self, comment_id):
       comment = self.get_object(self.comment_id)
       if self.request.user == comment.user:
         return True
       return False

urls.py

    path('<slug>/<int:comment_id>/delete/', DeleteCommentView.as_view(), name='delete_comment'),

请告知我如何让用户从帖子中删除他们的评论。删除整个帖子比较容易。

谢谢!

1 个答案:

答案 0 :(得分:0)

看起来您的URL带有两个参数,slugcomment_id,但是当您使用comment_id标签时,您只是传入{% url %}

由于您没有显示模型,所以并没有完全清楚,但是假设它是后期调试,您可以使用以下方法解决:

{% url 'posts:delete_comment' comment.post.slug comment.id %}

但是,可能更好的解决方案是让您的URL完全不冒犯,因为ID足以识别它。我们看不到BSModalDeleteView的代码,但我猜想它只需要一个ID,在这种情况下,您可能需要一个新的URL来删除诸如以下的注释:

path(
   "/comments/<int:pk>/delete/",
   DeleteCommentView.as_view(),
   name="delete_comment",
)