You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django评论删除功能报错:Reverse for 'delete_reply'未找到

Django评论删除功能报错解决

问题诊断

报错Reverse for 'delete_reply' with arguments '(7, '')' not found说明生成删除URL时,第二个参数reply_pk是空字符串。核心原因有两点:

  • 详情页视图未传递当前帖子的回复列表到模板,或模板未正确遍历回复实例
  • 删除视图的权限判断存在逻辑错误

修复步骤

1. 完善详情页视图,传递回复数据

修改Board_detail类的get方法,将当前帖子的所有回复查询并传递给模板:

class Board_detail(View):
    def get(self, *args, **kwargs):
        pk = kwargs.get("pk")    
        try:
            form = forms.ReplyForm()
            board = board_models.Board.objects.get(pk=pk)
            replies = board.reply.all()  # 通过related_name获取关联回复
            return render(self.request, "boards/board_detail.html", {
                "board": board, 
                "form": form,
                "replies": replies  # 添加回复列表到上下文
            })
        except board_models.Board.DoesNotExist:
            raise Http404()

2. 修正模板遍历逻辑

在模板中确保遍历回复列表,针对每个回复实例生成删除链接:

{% for reply in replies %}
    <div class="reply-item">
        <p>{{ reply.reply }}</p>
        <!-- 仅在遍历单个回复实例时,reply.pk才会有有效值 -->
        <a href="{% url 'boards:delete_reply' board.pk reply.pk %}" class="btn-link">Delete</a>
    </div>
{% endfor %}

3. 修复删除视图的权限判断错误

delete_reply视图中,用户实例与用户ID直接比较会导致逻辑错误,修正为:

@login_required()
def delete_reply(request, board_pk, reply_pk):
    try:
        reply = board_models.ReplyBoard.objects.get(pk=reply_pk)
        # 直接比较用户实例而非ID
        if request.user != reply.user:
            messages.error(request, "无权删除该评论")
        else:
            reply.delete()
            messages.success(request, "评论已删除")
    except board_models.ReplyBoard.DoesNotExist:
        messages.error(request, "目标评论不存在")
    return redirect(reverse("boards:board_detail", kwargs={"pk": board_pk}))

4. 验证URL配置

确认项目根urls.py中已正确设置boards应用的命名空间:

# 根urls.py
from django.urls import path, include

urlpatterns = [
    # ...其他路径
    path('boards/', include('boards.urls', namespace='boards')),
]

内容的提问来源于stack exchange,提问作者Woohyun Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 04:15:43