涉及到的主要知识有Jquery的使用,ajax的使用,递归方法的运用和html属性的添加javascript
<!--前端代码块--> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <!--jquery的调用--> <script src="/static/js/jquery-2.1.4.min.js"></script> <style type="text/css"> .comment_msg{ margin-left: 20px; } </style> </head> <body> <div class="comment"> <a comment_id="2" class="com">评论模板层级样式</a> <div class="comment_list"> <div class="comment_msg"> <span>一级评论</span> <div class="comment_msg"> <span>二级评论</span> <div class="comment_msg"> <span>三级评论</span> </div> </div> </div> <div class="comment_msg"> <span>一级评论</span> <div class="comment_msg"> <span>二级评论</span> </div> </div> <div class="comment_msg"> <span>一级评论</span> </div> </div> <div class="comment_list"> <a comment_id="1" class="com">评论</a> </div> </div> </body> </html>
//javaScript代码块 <script> $(function () { commentTab(); }); function commentTab(){ $('.com').click(function(){ var comment_id = $(this).attr("comment_id"); var that = $(this); $.ajax({ url:"/comment/", type:"post", data:{comment_id:comment_id}, dataType:'json', success:function (ret) { addDivs(ret,that); } }) }) }; function addDivs(data,that){ var html = '<div class="comment_list">'; $.each(data,function(k,v){ var arg = '<div class="comment_msg"><span>'; arg += v.content +'</span>'; arg += diGui(v.son); arg += '</div>'; html += arg; }); html += "</div>"; that.after(html); } function diGui(sons){ var html = ''; $.each(sons,function(k,v){ var args = '<div class="comment_msg"><span>'; args += v.content +'</span>'; args += diGui(v.son); args += '</div>'; html += args; }); return html; } </script>
#后端代码块 def comment(request): if request.method == "GET": return render(request,"comment.html") elif request.method == "POST": id = request.POST.get('comment_id') comment_list = [ {'id': 1, 'content': 'Python', 'user': '阿松大', 'parent_id': None}, {'id': 2, 'content': 'Java', 'user': '阿松大', 'parent_id': None}, {'id': 3, 'content': 'PHP', 'user': '阿松大', 'parent_id': None}, {'id': 4, 'content': '你hh', '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': 8}, {'id': 10, 'content': '我想静静', 'user': '全文', 'parent_id': None}, {'id': 11, 'content': '我是符符', 'user': 'xiaopang', 'parent_id': 6}, ] ret = [] comment_dict = {} for line in comment_list: line.update({'son': []}) # 给数据加键值 comment_dict[line['id']] = line # 添加到字典中 for r in comment_list: comment_line = r comment_line_parent_id = comment_line['parent_id'] if not comment_line_parent_id: ret.append(r) else: comment_dict[comment_line_parent_id]['son'].append(r) return HttpResponse(json.dumps(ret))
涉及Jquery,ajax,自定义模板语言(template)css
<!-- 前端代码块 --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="/static/js/jquery-2.1.4.min.js"></script> <style type="text/css"> .comment_msg{ margin-left: 20px; } </style> </head> <body> <div class="comment"> <a comment_id="2" class="com">评论模板层级样式</a> <div class="comment_list"> <div class="comment_msg"> <span>一级评论</span> <div class="comment_msg"> <span>二级评论</span> <div class="comment_msg"> <span>三级评论</span> </div> </div> </div> <div class="comment_msg"> <span>一级评论</span> <div class="comment_msg"> <span>二级评论</span> </div> </div> <div class="comment_msg"> <span>一级评论</span> </div> </div> </div> <div class="comment_list"> <a comment_id="1" class="com">评论</a> </div> </body> </html>
//javascript代码块 $(function () { commentTab(); }); function commentTab(){ $('.com').click(function(){ var comment_id = $(this).attr("comment_id"); var that = $(this); $.ajax({ url:"/comment/", type:"post", data:{comment_id:comment_id}, dataType:"html", success:function (ret) { console.log(ret); //addDivs(ret,that); that.after(ret); } }) }) };
#后端代码块 def comment(request): if request.method == "GET": return render(request,"comment.html") elif request.method == "POST": id = request.POST.get('comment_id') comment_list = [ {'id': 1, 'content': 'Python', 'user': '阿松大', 'parent_id': None}, {'id': 2, 'content': 'Java', 'user': '阿松大', 'parent_id': None}, {'id': 3, 'content': 'PHP', 'user': '阿松大', 'parent_id': None}, {'id': 4, 'content': '你hh', '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': 8}, {'id': 10, 'content': '我想静静', 'user': '全文', 'parent_id': None}, {'id': 11, 'content': '我是符符', 'user': 'xiaopang', 'parent_id': 6}, ] ret = [] comment_dict = {} for line in comment_list: line.update({'son': []}) # 给数据加键值 comment_dict[line['id']] = line # 添加到字典中 for r in comment_list: comment_line = r comment_line_parent_id = comment_line['parent_id'] if not comment_line_parent_id: ret.append(r) else: comment_dict[comment_line_parent_id]['son'].append(r) #return HttpResponse(json.dumps(ret)) return render(request, 'comments.html', {'comment_tree': ret})
<!--自定义模板语言:前端代码--> {% load comafter %} {% addDivs comment_tree %} #导入参数,此参数是后端返回的数组ret
#author:wylkjj #date:2020/1/2 #-*- coding:utf-8 -*- #后端自定义模板语言 from django import template from django.utils.safestring import mark_safe register = template.Library() #递归方法 def diGui(son): html = "" for cv in son: b = '<div class="comment_msg"><span>' b += cv['content'] + "</span>" b += diGui(cv['son']) b += "</div>" html += b return html @register.simple_tag def addDivs(comment_list): html = '<div class="comment_list">' for v in comment_list: a = '<div class="comment_msg"><span>' a += v['content'] + "</span>" a += diGui(v['son']) a += "</div>" html += a return mark_safe(html)