多级评论代码实现

  1. 递归法实现:
    from django.shortcuts import render,HttpResponse
    from app01 import models

    class
    Node: @staticmethod def digui(ret, row): for rt in ret: if rt['id'] == row['parent_id']: row['children'] = [] rt['children'].append(row) return else: Node.digui(rt['children'],row) @staticmethod def create_tree(comment_list): ret = []
    for row in comment_list: # row
    {'id': 6, 'content': '我从没见过如此有光的人', 'user': '千年老二', 'parent_id': 4}
                if not row['parent_id']: # None 
    row['children'] = []
    ret.append(row)
                else:
    Node.digui(ret,row)
    return ret
    def comment(request): 
    news_id
    = 1
    # comment_list = models.Comment.objects.filter(news_id=news_id)
    # for row in comment_list:
    # print(row.id,row.content,row.user_info.name,row.parent_id)
    comment_list =
    [
            {'id': 1, 'content': '乔妹天下最最美', 'user': '小赵', 'parent_id': None},
    {'id': 2, 'content': '感觉不相信爱情了', 'user': '张全蛋', 'parent_id': None}, {'id': 3, 'content': '好嗨哟,感觉...', 'user': '刘海柱', 'parent_id': None}, {'id': 4, 'content': '给你100个赞', 'user': '小六', 'parent_id': 1}, {'id': 5, 'content': '你很有品位哦', 'user': '小王', 'parent_id': 1}, {'id': 6, 'content': '我从没见过如此有光的人', 'user': '千年老二', 'parent_id': 4}, {'id': 7, 'content': '老子天下第一', 'user': '老五', 'parent_id': 2},
    {'id': 8, 'content': '我女朋友好漂亮...', 'user': '隔壁老王', 'parent_id': 3}, {'id': 9, 'content': '哈哈哈哈...', 'user': '二垓扛把子', 'parent_id': 6}, {'id': 10, 'content': '我的兄弟叫顺溜', 'user': '小明', 'parent_id': None}, ]
        comment_tree = Node.create_tree(comment_list)
    for i in comment_tree:
    print(i)
  2. 升级版(利用列表是引用类型的特性):
#评论列表(从数据库中取出):
comment_list = [
{'id'1'content''乔妹天下最最美''user''小赵''parent_id': None},
{
'id': 2, 'content': '感觉不相信爱情了', 'user': '张全蛋', 'parent_id': None}, {'id': 3, 'content': '好嗨哟,感觉...', 'user': '刘海柱', 'parent_id': None}, {'id': 4, 'content': '给你100个赞', 'user': '小六', 'parent_id': 1}, {'id': 5, 'content': '你很有品位哦', 'user': '小王', 'parent_id': 1}, {'id': 6, 'content': '我从没见过如此有光的人', 'user': '千年老二', 'parent_id': 4}, {'id': 7, 'content': '老子天下第一', 'user': '老五', 'parent_id': 2},
{'id': 8, 'content': '我女朋友好漂亮...', 'user': '隔壁老王', 'parent_id': 3}, {'id': 9, 'content': '哈哈哈哈...', 'user': '二垓扛把子', 'parent_id': 6}, {'id': 10, 'content': '我的兄弟叫顺溜', 'user': '小明', 'parent_id': None}, ] ret = [] comment_list_dict = {} for row in comment_list: #将列表转为字典(查找效率) 哈希 row.update({'children': []}) comment_list_dict[row['id']] = row """ comment_list_dict { 1:{'id': 1, 'content': '乔妹天下最最美', 'user': '小赵', 'parent_id': None},
2:{'id': 2, 'content': '感觉不相信爱情了', 'user': '张全蛋', 'parent_id': None},
3:{'id': 3, 'content': '好嗨哟,感觉...', 'user': '刘海柱', 'parent_id': None},
4:{'id': 4, 'content': '给你100个赞', 'user': '小六', 'parent_id': 1},
5: {'id': 5, 'content': '你很有品位哦', 'user': '小王', 'parent_id': 1},
6:{'id': 6, 'content': '我从没见过如此有光的人', 'user': '千年老二', 'parent_id': 4},
7: {'id': 7, 'content': '老子天下第一', 'user': '老五', 'parent_id': 2},

8:{'id': 8, 'content': '我女朋友好漂亮...', 'user': '隔壁老王', 'parent_id': 3},
         9:{'id': 9, 'content': '哈哈哈哈...', 'user': '二垓扛把子', 'parent_id': 6},
         10:{'id': 10, 'content': '我的兄弟叫顺溜', 'user': '小明', 'parent_id': None}
}
"""
for item in comment_list:
        parent_row = comment_list_dict.get(item['parent_id'])
        if not parent_row:
                ret.append(item)
        else:
                parent_row['children'].append(item)
print(ret)

 

posted @ 2019-09-24 14:14  __大江东去  阅读(810)  评论(0编辑  收藏  举报