我对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'),
请告知我如何让用户从帖子中删除他们的评论。删除整个帖子比较容易。
谢谢!
答案 0 :(得分:0)
看起来您的URL带有两个参数,slug
和comment_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",
)