功能:
在打开文章之后,能在文章下面是显示文章的评论,有父级评论。思路:在文章详情的视图里面,获取这个文章的全部评论,得到显示列表,然后用模板显示出来。步骤:一,在views.py的文章详情中获取评论:1 #文章详情 2 #blog/views.py 3 def article(request): 4 try: 5 # 获取评论信息 6 #查询指定文章的所有评论,按照id排序 7 comments = Comment.objects.filter(article=article).order_by('id') 8 #创建一个评论的空列表 9 comment_list = []10 #遍历一篇文章中的所有评论11 for comment in comments:12 for item in comment_list: 13 #判断item中是否有"children_comment"属性,返回布尔值 14 if not hasattr(item, 'children_comment'): 15 #若无"children_comment"属性,则设置这个属性,属性的值为[] 16 setattr(item, 'children_comment', []) 17 #如果item和父级评论的值相等,则讲该遍历出来的文章添加到"children_comment"属性,然后跳出当前循环 18 if comment.pid == item: 19 item.children_comment.append(comment) 20 break 21 #如果父级评论为空,则讲给评论放到父级评论列表里面 22 if comment.pid is None: 23 comment_list.append(comment) 24 except Exception as e: 25 print e 26 logger.error(e) 27 return render(request, 'article.html', locals())
二、在模板中显示出来
1 #article.html 2 {% for comment in comment_list %} 3 4 { { comment.username }}{ { comment.date_publish | date:'Y-m-d H:i:s' }} 56 7{
{ comment.content }} 8 9 10 {% for children_comment in comment.children_comment %}11
13 14 15 16
19 17 { { children_comment.content }}
18
如此就能讲一个文章的评论显示出来