【多级评论】

一、

前戏:

  1. 列表添加:

    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]

    列表添加元素练习

  2. 字典添加:

    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

解题思路:

  1. 通过冒泡算法进行解答。【推荐】
  2. 通过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〗-- 多级评论相关推荐

  1. django之评论系统及多级评论

    创建评论应用 相对来说,评论其实是另外一个比较独立的功能.Django 提倡,如果功能相对比较独立的话,最好是创建一个应用,把相应的功能代码写到这个应用里.我们的第一个应用叫 blog,它里面放了展示 ...

  2. SpringBoot和Vue集成Markdown和多级评论——基于SpringBoot和Vue的后台管理系统项目系列博客(二十三)

    系列文章目录 系统功能演示--基于SpringBoot和Vue的后台管理系统项目系列博客(一) Vue2安装并集成ElementUI--基于SpringBoot和Vue的后台管理系统项目系列博客(二) ...

  3. springboot+thymeleaf+jpa博客多级评论展示案例

    效果: 实体层 业务层: 控制层: 前端: 实体层 省略了get set方法 @Entity @Table(name = "t_comment") public class Com ...

  4. 潭州课堂25班:Ph201805201 django 项目 第二十四课 文章主页 多级评论数据库设计 ,后台代码完成 (课堂笔记)...

    加载新闻评论功能 1.分析 业务处理流程: 判断前端传的新闻id是否为空,是否为整数.是否不存在 请求方法:GET url定义:'/news/<int:news_id>' 请求参数:url ...

  5. 多级评论回复功能(纯前端,未连数据库)

    效果图: html结构(css我就不放了): <div><!--我的评论--><div class="my-comment"><texta ...

  6. mysql多级评论表_多级评论的实现思路

    一.表结构 class UserInfo(models.Model): """用户表""" username = models.CharFi ...

  7. php二级评论怎么实现,ThinkPHP视图模型实现二级嵌套评论的查询

    现正在编写一个学习网站项目用于参加全国中小学电脑制作活动,使用ThinkPHP框架 该项目要实现二级嵌套评论,pid为0的为一级评论,否则为二级评论,二级评论为一级评论的子评论. 最初设想是使用Thi ...

  8. django高级之点赞、文章评论及上传文件

    目录: 点赞 文章评论 上传文件 保留页面条件 一.点赞 1.所用技术: django model F查询 js应用:$(function () {}); 为文件加载完成执行ready() 方法.等同 ...

  9. PHP:打造一个无限极评论模块

    我的毕设项目的评论模块原来是采用多说插件完成的,但是我现在希望能够自己管理评论内容,所以自己开始写评论模块.具体准备采用与简书下评论类似的结构,即一级评论直接显示在文章下方,而二三级评论显示在一级评论 ...

最新文章

  1. object标签与embad掉钱_使用object或embed标签来播放SWF文件
  2. 计算机应用基础上机操作,计算机应用基础上机操作试题
  3. 2021个人北美秋招总结
  4. 青龙面板-傻妞sillyGirl xdd机器人频繁掉线解决方法
  5. POJ-3278-Catch That Cow
  6. python——类和对象之__dict__属性的使用
  7. Java的表白程序_java表白程序
  8. Java8 LinkedHashMap 源码阅读
  9. 瑞士电信vCPE商用落地 华三通信NFV方案成最大功臣
  10. Unity3d中使用自带动画系统制作下雨效果(一)
  11. 比Java语言更好,为什么Java比其他解释语言具有更好的性能?
  12. 查看Linux连接数
  13. Selenium2+python自动化18-加载Firefox配置
  14. 仿path首页滑动效果
  15. Echarts数据可视化title标题,开发全解+完美注释
  16. Java Socket文件上传
  17. 联想昭阳E42-80笔记本电脑重装系统记录
  18. 高精度三维扫描仪用于运动鞋逆向建模
  19. Facebook三方登陆流程
  20. Mysql 学习教程

热门文章

  1. 用php解决钱币组合问题,关于若干数组组合的问题 PHP
  2. Python入门--列表元素的删除,remove(),pop(),切片,clear(),del
  3. 获取网页源代码 python_python 获取网页源代码
  4. 51nod-1358:浮波那契
  5. [Python+sklearn] 拆分数据集为训练和测试子集 sklearn.model_selection.train_test_split()
  6. 在k8s中将文件通过configmap添加为pod的文件
  7. python网络爬虫系列教程——python中lxml库应用全解(xpath表达式)
  8. python基础系列教程——python基础语法全解
  9. HWDB数据集gnt格式转为png格式
  10. zynq开发系列3:GPIO连接MIO通过按键控制LED灯亮起