〖Demo〗-- 多级评论
【多级评论】
一、
前戏:
- 列表添加:
v1 = [1,2,3,4] v1.append(123) print(v1)data = [[11,22,33],[44,55,66] ]data[0].append(data[1]) print(data) # data = [ # [11,22,33, [44,55,66]], # [44,55,66] # ] data[1].append(77) print(data) # data = [ # [11,22,33, [44,55,66,77]], # [44,55,66,77] # ] print(data[0][3]) #[44, 55, 66, 77]
列表添加元素练习
- 字典添加:
v1 = {'k1':'v1'} v1['k2'] = 'v2' print(v1)data = [{'k1':'v1'},{'k2':'v2'} ]for item in data:item['kk'] = 'vv'print(data)
字典添加元素练习
案例:
如果parent_id非0,并且parent_id等于id 就添加到id值相同得那行:
# msg_list = [ # {'id':1,'content':'xxx','parent_id':None}, # {'id':2,'content':'xxx','parent_id':None}, # {'id':3,'content':'xxx','parent_id':None}, # {'id':4,'content':'xxx','parent_id':1}, # {'id':5,'content':'xxx','parent_id':4}, # {'id':6,'content':'xxx','parent_id':2}, # {'id':7,'content':'xxx','parent_id':5}, # {'id':8,'content':'xxx','parent_id':3}, # ] """ msg_list = [{'id':1,'content':'xxx',parent_id:None,child:[{'id':4,'content':'xxx',parent_id:1},{'id':5,'content':'xxx',parent_id:1,child:[{'id':7,'content':'xxx',parent_id:5},]}]},{'id':2,'content':'xxx',parent_id:None,child:[{'id':6,'content':'xxx',parent_id:2},]},{'id':3,'content':'xxx',parent_id:None,child:[{'id':8,'content':'xxx',parent_id:3},]},] """
案例代码:
msg_list = [{'id':1,'content':'xxx','parent_id':None},{'id':2,'content':'xxx','parent_id':None},{'id':3,'content':'xxx','parent_id':None},{'id':4,'content':'xxx','parent_id':1},{'id':5,'content':'xxx','parent_id':4},{'id':6,'content':'xxx','parent_id':2},{'id':7,'content':'xxx','parent_id':5},{'id':8,'content':'xxx','parent_id':3}, ]# v = [ row.setdefault('child',[]) for row in msg_list] # 列表生成式 msg_list_dict = { }for item in msg_list:item['child']=[]msg_list_dict[item['id']] = itemresult = [] for item in msg_list:pid = item['parent_id']if pid:msg_list_dict[pid]['child'].append(item)else:result.append(item)for i in result:print(i)
View Code
解题思路:
- 通过冒泡算法进行解答。【推荐】
- 通过for嵌套for循环亦可以实现,但是效率较低。
二、
Django views中实现:
一层评论:
comment_str = """""" v = """ <div class='comment'><div class='content'>asdasd</div><div class='content'>asdasd</div><div class='content'>asdasd</div><div class='content'>asdasd</div> </div> """comment_str += "<div class='comment'>" for row in result:tpl = "<div class='content'>%s</div>" %(row["content"])comment_str += tplcomment_str += "</div>"
View Code
两层评论:
comment_str = """""" v = """ <div class='comment'><div class='content'>asdasd</div><div class='content'>asdasd</div><div class='comment'><div class='content'>asdasd</div><div class='content'>asdasd</div><div class='content'>asdasd</div></div><div class='content'>asdasd</div> </div> """comment_str += "<div class='comment'>" for row in result:tpl = "<div class='content'>%s</div>" %(row["content"])comment_str += tplif row['child']:comment_str += "<div class='comment'>"for jow in row['child']:tpl = "<div class='content'>%s</div>" %(jow['content'])comment_str += tplcomment_str += "</div>" comment_str += "</div>"
View Code
通过递归实现多级评论:
#views.py #####################评论#################### msg_list = [{'id': 1, 'content': '写得太好了', 'parent_id': None},{'id': 2, 'content': '你说得对', 'parent_id': None},{'id': 3, 'content': '顶楼上', 'parent_id': None},{'id': 4, 'content': '你眼瞎吗', 'parent_id': 1},{'id': 5, 'content': '我看是', 'parent_id': 4},{'id': 6, 'content': '鸡毛', 'parent_id': 2},{'id': 7, 'content': '你是没啊', 'parent_id': 5},{'id': 8, 'content': '休息休息吧', 'parent_id': 3}, ]msg_list_dict = { }for item in msg_list:item['child'] = []msg_list_dict[item['id']] = item############msg_list_dict用于查找,msg_list result = [] for item in msg_list:pid = item['parent_id']if pid:msg_list_dict[pid]['child'].append(item)else:result.append(item)##############打印############# from utils.comment import comment_tree comment_str = comment_tree(result)#utils\comment.py def comment_tree(comment_list):""":param comment_list: [ {id,:child:[xxx]},{} ]:return:"""comment_str = "<div class='comment'>"for row in comment_list:tpl = "<div class='content'>%s</div>" %(row['content'])comment_str += tplif row['child']:child_str = comment_tree(row['child'])comment_str += child_strcomment_str += "</div>"return comment_str#endpage.html <h3>评论</h3> {{ comment_str|safe }}
View Code
三、
前端实现多级评论:
#URL路由url(r'^comments-(\d+).html',views.comments),#多级评论#视图函数 #views.py def comments(request,nid):print(nid)response = {'status':True,'data':None,'msg':None}try:msg_list = [{'id': 1, 'content': '写得太好了', 'parent_id': None},{'id': 2, 'content': '你说得对', 'parent_id': None},{'id': 3, 'content': '顶楼上', 'parent_id': None},{'id': 4, 'content': '你眼瞎吗', 'parent_id': 1},{'id': 5, 'content': '我看是', 'parent_id': 4},{'id': 6, 'content': '鸡毛', 'parent_id': 2},{'id': 7, 'content': '你是没啊', 'parent_id': 5},{'id': 8, 'content': '休息休息吧', 'parent_id': 3},]# v = [ row.setdefault('child',[]) for row in msg_list]# 列表生成式 msg_list_dict = {}for item in msg_list:item['child'] = []msg_list_dict[item['id']] = itemresult = []for item in msg_list:pid = item['parent_id']if pid:msg_list_dict[pid]['child'].append(item)else:result.append(item)response['data'] = resultexcept Exception as e:response['status'] = Falseresponse['msg'] = str(e)return HttpResponse(json.dumps(response))#模板语言 <h3>评论</h3> <div id="commentArea"></div><script src="/static/js/jquery-3.2.1.js"></script> <script> /*1. 调用对象方法时,通过调用类的prototype中的方法,可以扩展2. 正则表达式 /\w+/g3. 字符串replace''.replace('alex','sb'); 指定参数替换''.replace(/\w+/,'sb'); 只替换第一个值''.replace(/\w+/g,'sb'); 替换全局值''.replace(/(\w+)/g,function(k,kk){return 11;}); 加分组替换全局值*/String.prototype.Format = function (arg) {/*this,当前字符串 "i am {name1}, age is {age9}"arg,Format方法传入的参数 {name:'alex',age:18}return,格式化之后获取的新内容 i am alex, age is 18*/var temp = this.replace(/\{(\w+)\}/g,function (k,kk) {return arg[kk];});return temp;};$(function () {// 发送Ajax请求,获取所有评论信息// 列表// js生成结构$.ajax({url: '/comments-{{ obj.nid }}.html',type: 'GET',dataType: 'JSON',success: function (arg) {if (arg.status) {var comment = commentTree(arg.data);$('#commentArea').append(comment)} else {alert(arg.msg)}}})});function commentTree(commentList) {var comment_str = "<div class='comment'>";$.each(commentList, function (k, row) {//var temp = "<div class='content'>" + row.content + "</div>";var temp = "<div class='content'>{content}</div>".Format({content:row.content});comment_str += tempif(row.child.length>0){comment_str += commentTree(row.child);}});comment_str += '</div>';return comment_str} </script>
前端实现多级评论示例代码
自定义前端字符串格式化方法:
说明: python中可以通过format来实现字符串格式化。 Python中是从str中找,前端是从String中找。 前端默认是没有字符串格式化得,但是通过String.prototype可以为前端字符串扩展一个方法。 格式化就是替换。目的是实现这样得效果: v1 = "i am {name},age is {age}" v1.Format({name:'alex',age:18})例如: #时间: dt = new Date() dt.setDate() 内部就是依赖它来实现得:Date.prototype.getDate = function() {};#字符串: var v = 'sdf' v.charAT() 内部是依赖它来实现得:String.prototype.charAt = function(pos) {};
例子: String.prototype.Format = function (arg) {/*this,当前字符串arg,Format方法传入的参数return,格式化之后获取的参数*/console.log(this,arg);return '666' };
结果:
#加匿名函数例子: v2 = v1.replace(/\{\w+\}/g,function(k){console.log(k)})结果: {name} {age} "i am undefined,age is undefined"#加分组例子: v2 = v1.replace(/\{(\w+)\}/g,function(k,kk){console.log(k,kk)}) #函数可以有返回值结果: {name} name {age} age "i am undefined,age is undefined"
转载于:https://www.cnblogs.com/SHENGXIN/p/7658810.html
〖Demo〗-- 多级评论相关推荐
- django之评论系统及多级评论
创建评论应用 相对来说,评论其实是另外一个比较独立的功能.Django 提倡,如果功能相对比较独立的话,最好是创建一个应用,把相应的功能代码写到这个应用里.我们的第一个应用叫 blog,它里面放了展示 ...
- SpringBoot和Vue集成Markdown和多级评论——基于SpringBoot和Vue的后台管理系统项目系列博客(二十三)
系列文章目录 系统功能演示--基于SpringBoot和Vue的后台管理系统项目系列博客(一) Vue2安装并集成ElementUI--基于SpringBoot和Vue的后台管理系统项目系列博客(二) ...
- springboot+thymeleaf+jpa博客多级评论展示案例
效果: 实体层 业务层: 控制层: 前端: 实体层 省略了get set方法 @Entity @Table(name = "t_comment") public class Com ...
- 潭州课堂25班:Ph201805201 django 项目 第二十四课 文章主页 多级评论数据库设计 ,后台代码完成 (课堂笔记)...
加载新闻评论功能 1.分析 业务处理流程: 判断前端传的新闻id是否为空,是否为整数.是否不存在 请求方法:GET url定义:'/news/<int:news_id>' 请求参数:url ...
- 多级评论回复功能(纯前端,未连数据库)
效果图: html结构(css我就不放了): <div><!--我的评论--><div class="my-comment"><texta ...
- mysql多级评论表_多级评论的实现思路
一.表结构 class UserInfo(models.Model): """用户表""" username = models.CharFi ...
- php二级评论怎么实现,ThinkPHP视图模型实现二级嵌套评论的查询
现正在编写一个学习网站项目用于参加全国中小学电脑制作活动,使用ThinkPHP框架 该项目要实现二级嵌套评论,pid为0的为一级评论,否则为二级评论,二级评论为一级评论的子评论. 最初设想是使用Thi ...
- django高级之点赞、文章评论及上传文件
目录: 点赞 文章评论 上传文件 保留页面条件 一.点赞 1.所用技术: django model F查询 js应用:$(function () {}); 为文件加载完成执行ready() 方法.等同 ...
- PHP:打造一个无限极评论模块
我的毕设项目的评论模块原来是采用多说插件完成的,但是我现在希望能够自己管理评论内容,所以自己开始写评论模块.具体准备采用与简书下评论类似的结构,即一级评论直接显示在文章下方,而二三级评论显示在一级评论 ...
最新文章
- object标签与embad掉钱_使用object或embed标签来播放SWF文件
- 计算机应用基础上机操作,计算机应用基础上机操作试题
- 2021个人北美秋招总结
- 青龙面板-傻妞sillyGirl xdd机器人频繁掉线解决方法
- POJ-3278-Catch That Cow
- python——类和对象之__dict__属性的使用
- Java的表白程序_java表白程序
- Java8 LinkedHashMap 源码阅读
- 瑞士电信vCPE商用落地 华三通信NFV方案成最大功臣
- Unity3d中使用自带动画系统制作下雨效果(一)
- 比Java语言更好,为什么Java比其他解释语言具有更好的性能?
- 查看Linux连接数
- Selenium2+python自动化18-加载Firefox配置
- 仿path首页滑动效果
- Echarts数据可视化title标题,开发全解+完美注释
- Java Socket文件上传
- 联想昭阳E42-80笔记本电脑重装系统记录
- 高精度三维扫描仪用于运动鞋逆向建模
- Facebook三方登陆流程
- Mysql 学习教程
热门文章
- 用php解决钱币组合问题,关于若干数组组合的问题 PHP
- Python入门--列表元素的删除,remove(),pop(),切片,clear(),del
- 获取网页源代码 python_python 获取网页源代码
- 51nod-1358:浮波那契
- [Python+sklearn] 拆分数据集为训练和测试子集 sklearn.model_selection.train_test_split()
- 在k8s中将文件通过configmap添加为pod的文件
- python网络爬虫系列教程——python中lxml库应用全解(xpath表达式)
- python基础系列教程——python基础语法全解
- HWDB数据集gnt格式转为png格式
- zynq开发系列3:GPIO连接MIO通过按键控制LED灯亮起