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
相关产品推荐
相关产品推荐

