1.实现评论数据结构两种方式

  (1)循环实现评论数据结构(推荐)

  (2)js递归实现评论数据结构

2.显示评论内容两种方式

  (1)js递归显示评论内容(推荐)

        前端进行递归实现

  (2)simple_tag递归显示评论内容    

        render + simple_tag
        前端直接after指定位置

 1 from django.shortcuts import render,HttpResponse
 2 from app01 import models
 3
 4 def index(request):
 5     return render(request, 'index.html')
 6 #循环实现评论数据结构(推荐)
 7 def comment(request):
 8     news_id = request.GET.get('news_id')
 9     # models.xxx.filter(news_id=news_id).values(...)
10     comment_list = [
11         {'id': 1, 'content': 'Python最牛逼', 'user': '搞基建', 'parent_id': None},
12         {'id': 2, 'content': 'Java最牛逼', 'user': '搞基建', 'parent_id': None},
13         {'id': 3, 'content': 'PHP最牛逼', 'user': '搞基建', 'parent_id': None},
14         {'id': 4, 'content': '你最牛逼', 'user': '小比虎', 'parent_id': 1},
15         {'id': 5, 'content': '老师最你比', 'user': '李欢', 'parent_id': 1},
16         {'id': 6, 'content': '郭永昌是...', 'user': '郭永昌', 'parent_id': 4},
17         {'id': 7, 'content': '哈哈我是流氓...', 'user': '崔月圆', 'parent_id': 2},
18         {'id': 8, 'content': '我女朋友好漂亮...', 'user': '崔月圆', 'parent_id': 3},
19         {'id': 9, 'content': '见到你女友,交定你朋友...', 'user': '搞基建', 'parent_id': 8},
20         {'id': 10, 'content': '见到你女友,交定你朋友...', 'user': '鼻环', 'parent_id': None},
21         {'id': 11, 'content': '我是大胖...', 'user': 'xiaopang', 'parent_id': 6},
22     ]
23     comment_tree = []
24     comment_list_dict = {}
25     for row in comment_list:
26         row.update({'children': []})
27         comment_list_dict[row['id']] = row
28     for item in comment_list:
29         parent_row = comment_list_dict.get(item['parent_id'])
30         if not parent_row:
31             comment_tree.append(item)
32         else:
33             parent_row['children'].append(item)
34
35     import json
36     return HttpResponse(json.dumps(comment_tree)) #JS递归显示评论内容(推荐)
37     #return render(request, 'comment.html', {'comment_tree': comment_tree}) #simple_tag递归显示评论内容

views.py(循环实现评论数据结构)

  1 from django.shortcuts import render,HttpResponse
  2 from app01 import models
  3 #递归实现评论数据结构(不推荐)
  4 class Node:
  5     @staticmethod
  6     def digui(ret, row):
  7         # ret: {'id': 4, 'content': '你最牛逼', 'user': '小比虎', 'parent_id': 1, 'children': []},{'id': 5, 'content': '老师最你比', 'user': '李欢', 'parent_id': 1},]
  8         # row {'id': 6, 'content': '郭永昌是...', 'user': '郭永昌', 'parent_id': 4},
  9         for rt in ret:
 10             if rt['id'] == row['parent_id']:
 11                 row['children'] = []
 12                 rt['children'].append(row)
 13                 return
 14             else:
 15                 Node.digui(rt['children'],row)
 16
 17     @staticmethod
 18     def create_tree(comment_list):
 19         ret = []
 20         """
 21         {'user': '搞基建', 'parent_id': None, 'id': 1, 'children': [{'id': 4, 'content': '你最牛逼', 'user': '小比虎', 'parent_id': 1, 'children': []},{'id': 5, 'content': '老师最你比', 'user': '李欢', 'parent_id': 1},], 'content': 'Python最牛逼'}
 22         {'user': '搞基建', 'parent_id': None, 'id': 2, 'children': [], 'content': 'Java最牛逼'}
 23         {'user': '搞基建', 'parent_id': None, 'id': 3, 'children': [], 'content': 'PHP最牛逼'}
 24         """
 25         for row in comment_list:
 26             # row {'id': 6, 'content': '郭永昌是...', 'user': '郭永昌', 'parent_id': 4},
 27             if not row['parent_id']: # None
 28                 row['children'] = []
 29                 ret.append(row)
 30             else:
 31                 Node.digui(ret,row)
 32         return ret
 33
 34 def comment(request):
 35     news_id = 1
 36
 37     # comment_list = models.Comment.objects.filter(news_id=news_id)
 38     # for row in comment_list:
 39     #     print(row.id,row.content,row.user_info.name,row.parent_id)
 40     comment_list = [
 41         {'id': 1, 'content': 'Python最牛逼', 'user': '搞基建', 'parent_id': None},
 42         {'id': 2, 'content': 'Java最牛逼', 'user': '搞基建', 'parent_id': None},
 43         {'id': 3, 'content': 'PHP最牛逼', 'user': '搞基建', 'parent_id': None},
 44         {'id': 4, 'content': '你最牛逼', 'user': '小比虎', 'parent_id': 1},
 45         {'id': 5, 'content': '老师最你比', 'user': '李欢', 'parent_id': 1},
 46         {'id': 6, 'content': '郭永昌是...', 'user': '郭永昌', 'parent_id': 4},
 47         {'id': 7, 'content': '哈哈我是流氓...', 'user': '崔月圆', 'parent_id': 2},
 48         {'id': 8, 'content': '我女朋友好漂亮...', 'user': '崔月圆', 'parent_id': 3},
 49         {'id': 9, 'content': '见到你女友,交定你朋友...', 'user': '搞基建', 'parent_id': 8},
 50         {'id': 10, 'content': '见到你女友,交定你朋友...', 'user': '鼻环', 'parent_id': None},
 51     ]
 52     """
 53     comment_tree = Node.create_tree(comment_list)
 54     for i in comment_tree:
 55         print(i)
 56     """
 57     # hash_comment_list = {}
 58     # for m in range(len(comment_list)):
 59     #     comment_list[m].update({'children':[]})
 60     #     hash_comment_list[comment_list[m]['id']] = comment_list[m]
 61     # # print(hash_comment_list)
 62     # ret = []
 63     # for i in range(len(comment_list)):
 64     #     node = comment_list[i]
 65     #     pnode = hash_comment_list.get(node['parent_id'])
 66     #     if pnode:
 67     #         pnode['children'].append(node)
 68     #     else:
 69     #         ret.append(node)
 70     # print(ret)
 71
 72     # hash_comment_list = {}
 73     # for item in comment_list:
 74     #     item.update({'children': []})
 75     #     hash_comment_list[item['id']] = item
 76     # # print(hash_comment_list)
 77     # ret = []
 78     # for row in comment_list:
 79     #     node = row
 80     #     pnode = hash_comment_list.get(node['parent_id'])
 81     #     if pnode:
 82     #         pnode['children'].append(node)
 83     #     else:
 84     #         ret.append(node)
 85     #     print(comment_list)
 86     # print(ret)
 87
 88
 89     # for i in comment_list:
 90     #     i.update({'children': []})
 91     #
 92     # for i in comment_list:
 93     #     if i['id'] == 5:
 94     #         i['children'].append(i)
 95     #
 96     # for i in comment_list:
 97     #     print(i)
 98
 99     """
100     [
101         {
102             'id': 1,
103             'content': 'Python最牛逼',
104             'user': '搞基建',
105             'parent_id': None,
106             'children': [
107                 {'id': 4, 'content': '你最牛逼', 'user': '小比虎', 'parent_id': 1, 'children': [
108                     {'id': 6, 'content': '郭永昌是...', 'user': '郭永昌', 'parent_id': 4, 'children': []},
109                 ]},
110                 {'id': 5, 'content': '老师最你比', 'user': '李欢', 'parent_id': 1, 'children': []},
111             ]
112         },
113         {
114             'id': 2,
115             'content': 'Python最牛逼',
116             'user': '搞基建',
117             'parent_id': None,
118             'children': []
119         },
120         {
121             'id': 3,
122             'content': 'Python最牛逼',
123             'user': '搞基建',
124             'parent_id': None,
125             'children': []
126         },
127     ]
128     """
129     return HttpResponse('Comment')

views.py(js递归实现评论数据结构)

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6     <style>
 7         .comment-box{
 8             margin-left: 20px;
 9         }
10     </style>
11 </head>
12 <body>
13     <div class="item">
14         <a news_id="19" class="com">评论</a>
15         <div class="comment-list">
16             <div class="comment-box">
17                 <span>Py最牛</span>
18                 <div></div>
19             </div>
20             <div class="comment-box">
21                 <span>搞基建</span>
22                 <div class="comment-box">
23                     <span>小胡比</span>
24                 </div>
25                 <div class="comment-box">
26                     <span>玩得患</span>
27                 </div>
28             </div>
29         </div>
30     </div>
31     <div class="item">
32         <a news_id="18" class="com">评论</a>
33     </div>
34     <div class="item">
35         <a news_id="17" class="com">评论</a>
36     </div>
37
38     <script src="/static/jquery-2.1.4.min.js"></script>
39     //JS递归显示评论内容
40     <script>
41         $(function () {
42             bindCommentEvent();
43         });
44         function bindCommentEvent() {
45            $('.com').click(function () {
46                var news_id = $(this).attr('news_id');
47                var _this = $(this);
48                $.ajax({
49                    url: '/comment/',
50                    type: 'GET',
51                    data: {news_id: news_id},
52                    dataType: "html",
53                    success:function (arg) {
54                        //create_tree(arg, _this);
55                        console.log(arg);
56                        _this.after(arg);
57                    }
58                })
59            })
60         }
61
62         function diGui(children_list){
63                 var html = "";
64                 $.each(children_list,function (ck,cv) {
65                        var b = '<div class="comment-box"><span>';
66                        b+= cv.content + "</span>";
67                        b += diGui(cv.children);
68                        b += "</div>";
69                        html += b;
70                  });
71                 return html;
72             }
73
74         function create_tree(data,$this) {
75              var html = '<div class="comment-list">';
76              $.each(data,function (k,v) {
77                 var a = '<div class="comment-box"><span>';
78                  a+= v.content + "</span>";
79                  // 创建子评论
80                  a += diGui(v.children);
81                  a+= "</div>";
82                  html += a;
83              });
84              html += "</div>";
85              $this.after(html);
86         }
87     </script>
88 </body>
89 </html>

index.html(JS递归显示评论内容 推荐)

 1 #__author:  Administrator
 2 #date:  2016/12/26
 3 from django import template
 4 from django.utils.safestring import mark_safe
 5 #simple_tag递归显示评论内容
 6 #路径:/app01/templatetags
 7 register = template.Library()
 8
 9 def diGui(children_list):
10     html = ""
11     for cv in children_list:
12         b = '<div class="comment-box"><span>'
13         b += cv['content'] + "</span>"
14         b += diGui(cv['children'])
15         b += "</div>"
16         html += b
17     return html
18
19 @register.simple_tag
20 def create_tree(comment_list):
21     html = '<div class="comment-list">'
22     for v in comment_list:
23         a = '<div class="comment-box"><span>'
24         a += v['content'] + "</span>"
25         a += diGui(v['children'])
26         a += "</div>"
27         html += a
28     return mark_safe(html)
29
30 """
31  function diGui(children_list){
32                 var html = "";
33                 $.each(children_list,function (ck,cv) {
34                        var b = '<div class="comment-box"><span>';
35                        b+= cv.content + "</span>";
36                        b += diGui(cv.children);
37                        b += "</div>";
38                        html += b;
39                  });
40                 return html;
41             }
42
43
44             function create_tree(data,$this) {
45                  var html = '<div class="comment-list">';
46                  $.each(data,function (k,v) {
47                     var a = '<div class="comment-box"><span>';
48                      a+= v.content + "</span>";
49                      // 创建自评论
50                      a += diGui(v.children);
51                      a+= "</div>";
52                      html += a;
53                  });
54
55                  html += "</div>";
56                 $this.after(html);
57         }
58     """

laogao.py(simple_tag递归显示评论内容)

{% load laogao %}
{% create_tree comment_tree %}//simple_tag递归显示评论内容

comment.html(simple_tag递归显示评论内容)

转载于:https://www.cnblogs.com/lbzbky/p/11028601.html

抽屉实现评论数据结构及评论内容显示示例相关推荐

  1. 备战秋招——记录自己学习的第六天(Django项目难点拆分——层级评论数据结构实现)

    我们知道,在实现BBS项目时,评论的功能是必不可少的. 先配置好环境 (urls) from django.contrib import admin from django.urls import p ...

  2. Python爬虫爬取豆瓣电影评论内容,评论时间和评论人

    Python爬虫爬取豆瓣电影评论内容,评论时间和评论人 我们可以看到影评比较长,需要展开才能完整显示.但是在网页源码中是没有显示完整影评的.所以我们考虑到这部分应该是异步加载的方式显示.所以打开网页的 ...

  3. 数据结构:评论盖楼设计,支持无限层级

    第一部分:问题抛出 常见的设计,采用标准的树形结构,每个结点记录父ID(pid).利用pid查询子集时,一次只能查询出一层,查询多层时,逻辑代码将会非常繁琐,而且无法一次查询出子集的数量等等,另外多次 ...

  4. WordPress后台的文章、分类,媒体,页面,评论,链接等所有信息中显示ID并将ID设置为第一列...

    WordPress后台默认是不显示文章.分类等信息ID的,查看起来非常不方便,不知道Wp团队出于什么原因默认不显示这个但可以使用Simply Show IDs插件来实现 不使用插件,其他网友的实现: ...

  5. php网站评论代码,PHP评论代码帮助

    我正在编写我的第一个博客.在各种教程和其他论坛的帮助下,我设法收集了半工作代码. 现在我有一个代码,它接受并显示评论,但问题是协调哪些评论发布在哪个帖子上.我目前的设置是我的所有帖子都是HTML文件, ...

  6. 商品评论信息与评论信息分类

    商品详情分析-显示商品评论信息: 数据库实现: 实体类: package com.qfedu.fmmall.entity;import lombok.AllArgsConstructor; impor ...

  7. 爬取MOOC课程评论区的评论数据

    对MOOC上某一课程评论区的评论数据爬取出来(例如:爬取<大学生计算机基础>) 1.爬取流程框架 2.爬取数据 ** 用户名-namesList.用户ID-user_ID.评论内容-com ...

  8. 微信小程序 点赞+评论(无限级评论回复)/带图评论解决方案

    微信小程序 点赞+评论(无限级评论回复)/带图评论解决方案 需求描述 实现要点分析 目录结构 前端功能方法集成 后端方法 数据库结构 效果展示 未解决的问题 需求描述 最近在思考一个需求:文章可以评论 ...

  9. wordpress评论插件_WordPress评论插件的全面比较

    wordpress评论插件 Engagement, engagement, engagement. 参与,参与,参与. My brother Lee and I are web developers ...

最新文章

  1. 机器视觉系统原理及学习策略
  2. Java继承时构造函数的关系
  3. 前端要给力之:代码可以有多烂?
  4. dependencyManagement与dependencies区别
  5. Redis数据分布哈希后取模
  6. VS Code HtmlFindClass 插件介绍
  7. Yahoo! Screwdriver:可扩展的持续集成工具
  8. linux磁盘常用操作命令
  9. 怎么改变linux的语言环境,更改Linux语言环境
  10. java method方法_java入门(六) | 方法(Method)的定义和使用
  11. navicat 表合并查询_navicat怎么合并表格
  12. s32k144 isystem linux,S32K144之时钟配置
  13. StbM 和 Time Synchronization Over CAN and Ethernet(二) 以EthTSyn和StbM为例
  14. 6种不同画法画平行线_学会6种常用平行线的判定方法,数学成绩悄悄涨20分
  15. 数学实验教程matlab版实验报告,MATLAB数学实验报告.doc
  16. 武警二路擒敌拳16式——第一式动作分解
  17. 转: std::string用法详解
  18. 信管家显示连接服务器失败,信管家交易软件,条件单设置方法
  19. ccf题库java_CCF题库
  20. 情人节程序员用HTML网页表白【76-谢谢你的爱】 HTML5七夕情人节表白网页源码 HTML+CSS+JavaScript

热门文章

  1. [编程入门]自定义函数求一元二次方程
  2. 2018年保研夏令营之华东理工大学计算机
  3. 拆解一个居家隔离监测的无线门磁
  4. java中获取某个Date为一年中的第多少周
  5. python应用实践之boss数据获取
  6. .net CallbackOnCollectedDelegate 垃圾回收问题。 (Handle::Invoke”类型的已垃圾回收委托进行了回调。)
  7. AES加密算法的JAVA实现
  8. Spark源码阅读(五) --- Spark的支持的join方式以及join策略
  9. log4cplus:ERROR No appenders could be found for logger (AdSyncNamespace).
  10. CPU 体系结构书籍