Удаление комментариев из поста: NoReverseMatch при попытке удалить комментарий поста - PullRequest
1 голос
/ 02 мая 2020

Я довольно новичок в django и веб-разработке и пытаюсь удалить комментарий из сообщений, и предоставил представление на основе классов, но я получаю эту ошибку при выполнении кода.

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

Я предоставил раздел комментариев ниже, и вы можете найти раздел удаления ближе к последнему.

раздел комментариев. 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 голосов
/ 02 мая 2020

Похоже, ваш URL принимает два аргумента, slug и comment_id, но вы передаете comment_id только при использовании тега {% url %}.

Не совсем очевидно, что slug - это потому что вы не показываете модель, но при условии, что это пост-слаг, вы можете исправить это следующим образом:

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

Вероятно, лучшее решение, однако, состоит в том, чтобы ваш URL вообще не брал slug поскольку идентификатора достаточно, чтобы его идентифицировать. Мы не видим код для BSModalDeleteView, но я предполагаю, что он ожидает только ID, и в этом случае вам может понадобиться новый URL только для удаления комментариев, таких как:

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