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

Django使用django-mptt的recursetree时模板children为空如何解决

问题原因

你传递给模板的评论查询集不符合recursetree标签的要求:
recursetree只接收根节点集合(即没有父节点的顶级评论)作为输入,标签会自动递归遍历每个根节点下的所有子节点完成渲染。而你视图里写的article.comments.all()返回了当前文章下所有层级的评论,子回复也被当作独立的根节点传入了标签,自然不会被挂载到对应的父节点下渲染,所以父节点的{{ children }}输出为空。你看到的get_descendant_count数值正确,是因为MPTT的树结构本身存储没问题,只是渲染逻辑的输入不符合要求。

修复方案

修改视图中get_context_data里的评论查询逻辑,仅查询顶级评论传入模板即可:

# 原来的写法
# context['comments'] = article.comments.all()
# 修改为
context['comments'] = article.comments.filter(parent__isnull=True)

如果要优化查询效率,避免渲染时产生N+1查询,可以提前预加载子节点:

context['comments'] = article.comments.filter(parent__isnull=True).prefetch_related('children')

修改后重新刷新页面,子评论就会正常渲染在对应父节点的children位置。

内容的提问来源于stack exchange,提问作者Homunculus Reticulli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:36:08