zoukankan      html  css  js  c++  java
  • 多级评论代码实现

    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)
  • 相关阅读:
    Mysql命令下导出select查询数据之 select ... into outfile方法
    接口调试工具Postman之自动同步Chrome cookies,实现自动登陆验证
    PHP函数file_get_contents()使用 https 协议时报错:SSL operation failed
    MySQL中连接超时自动断开的解决方案
    UEditor富文本WEB编辑器设置代码高亮
    Laravel 自定义公共函数全局使用,并设置自定加载
    Laravel 解决blade模板转义html标签问题
    PHP 高效导入导出Excel(csv)方法之fgetcsv()和fputcsv()函数
    Mysql命令行tab自动补全方法
    PHP利用get_headers()函数判断远程的url地址是否有效
  • 原文地址:https://www.cnblogs.com/qvpenglou/p/11578030.html
Copyright © 2011-2022 走看看