多级评论

先来点:

#----- 1

v1 = [1,2,3,4]
v1.append(123)
print(v1)  #[1, 2, 3, 4, 123]



#-----2

v1 = {'k1':'v1'}
v1['k2'] = 'v2'
print(v1) #3{'k1': 'v1', 'k2': 'v2'}


#------3

data = [
    [11,22,33],
    [44,55,66]
]
print('',data)

data[0].append(data[1])
print('',data)


# 先 [[11, 22, 33], [44, 55, 66]]
# 后 [[11, 22, 33, [44, 55, 66]], [44, 55, 66]]
View Code

再来点:

data = [
    [11,22,33],
    [44,55,66]
]


data[0].append(data[1])   #


data[1].append(77)       #


print('',data[0][3])      #



# 前 [[11, 22, 33, [44, 55, 66]], [44, 55, 66]]
# 中 [[11, 22, 33, [44, 55, 66, 77]], [44, 55, 66, 77]]
# 后 [44, 55, 66, 77]
View Code

不急,再来点:

data = [
    {'k1':'v1'},
    {'k2':'v2'}
]

for item in data:
    item['kk'] = 'vv'


print(data)


#[{'k1': 'v1', 'kk': 'vv'}, {'k2': 'v2', 'kk': 'vv'}]
View Code

不能再来了,来点爽快的:

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]   #这个写法 好像 有点难
# print(msg_list)


for item in msg_list:   #换个 简单一点点
    item['child'] = []
print('***',msg_list)

"""

msg_list_dict = {}

for item in msg_list:
    item['child'] = []
    msg_list_dict[item['id']] = item



result = []
for item in msg_list:

    pid = item['parent_id']
    if pid:
        msg_list_dict[pid]['child'].append(item)
    else:
        result.append(item)


print(result)


"""

     **********************展示效果**************************

[
    {'id': 1, 'content': 'xxx', 'parent_id': None, 'child': [
        {'id': 4, 'content': 'xxx', 'parent_id': 1, 'child': [
            {'id': 5, 'content': 'xxx', 'parent_id': 4, 'child': [
                {'id': 7, 'content': 'xxx', 'parent_id': 5, 'child': []}]}]}]}, 
    {'id': 2, 'content': 'xxx', 'parent_id': None, 'child': [
        {'id': 6, 'content': 'xxx', 'parent_id': 2, 'child': []}]}, 
    {'id': 3, 'content': 'xxx', 'parent_id': None, 'child': [
        {'id': 8, 'content': 'xxx', 'parent_id': 3, 'child': []}]}]


"""

评论以及多级评论

views.py

def comment(request):   #评论

    user_id = request.user.nid
    article_id = request.POST.get('article_id')
    comment_content =request.POST.get('comment_content')
    # print('%%%%%%%%%', comment_content)



    if request.POST.get('parent_comment_id'):
        c = int(request.POST.get('parent_comment_id'))
        comment_obj = models.Comment.objects.create(article_id=article_id, content=comment_content,
                                                    user_id=user_id, parent_id_id=c)
    else:
        comment_obj = models.Comment.objects.create(article_id=article_id,
                                                    content=comment_content,user_id=user_id)

    models.Article.objects.filter(nid=article_id).update(comment_count=F("comment_count")+1)

    response_ajax = {"comment_createTime":str(comment_obj.create_time)[:16]}

    return HttpResponse(json.dumps(response_ajax))
View Code

.HTML

{% block article %}

    <div class="article">
        <h3 class="title" style="text-align: center">{{ article_obj.title }}</h3>
        <hr>
        <div class="author" style="text-align: center">
            <div style="">
                <b>作者</b>
                <b><a href="">{{ user_obj }}</a></b>
            </div>
        </div>
        <div class="show-content">
        {{ article_detail.content|safe }}
    </div>
        <hr>
    </div>

    <div class="show-foot">

            <img id="user_img" src="{{ user_obj.avatar.url }}" style="height: 80px; 80px;">


        <div class="icon" style="margin-top: 30px">
            {% csrf_token %}
            &nbsp; <a href="">评论</a>
            <a class="poll">赞(<span>{{ article_obj.up_count }}</span>)</a>

            <span class="c1"></span>
        </div>


        <div>
            <a href="">{{ user_obj.nickname }}</a>
            发布于{{ article_obj.create_time }}
            <span>阅读({{ article_obj.read_count }})</span>
            <span>评论({{ article_obj.comment_count }})</span>
        </div>
        <hr>

    </div>


   <h5>已有评论</h5>
     <ul class="list-group comment_list">
              {% for coment in coment_list %}
                  <li class="list-group-item comment_item">
                      <a href="">{{ coment.user.username }}</a>
                      <a href="">{{ coment.create_time|date:"Y-m-d H:i" }}</a>

                      <a href="" class="pull-right">&nbsp;&nbsp;支持</a>
                      <a href="#comment_content" class="pull-right reply_btn">回复</a>
                      <span class="{{ coment.nid }}"></span>

                      <div>

                          {% if coment.parent_id %}
                            <span><a href="">@</a>{{ coment.parent_id.user.username }}:{{ coment.parent_id.content }}</span>
                              <p>{{ coment.content }}</p>
                          {% else %}
                              {{ coment.content }}
                          {% endif %}

                     </div>
                  </li>
              {% endfor %}



          </ul>
    
          {# ----------   评论内容输入框   -------------#}
         <form action="">
              <textarea  id="comment_content" cols="30" rows="5">



              </textarea>
               <p>
                   <input type="button" value="submit" class="btn btn-primary ajax_comment">
                    <span class="s1"></span>
               </p>

          </form>


{% endblock %}




{% block javascript %}
    <script>

    String.prototype.format= function(){
               var args = arguments;
               return this.replace(/{(d+)}/g,function(s,i){
                 return args[i];
               });
        };

        var article_id={{ article_obj.nid }};
        var parent_comment_id='';
        var father_comment_username='';



        $(".poll").click(function () {
               // 实现一个点赞: 哪一个用户对哪一篇文章点了赞


               {% if request.user.is_authenticated %}
                    $.ajax({
                   url:"/app01/poll/",
                   type:"POST",
                   data:{"csrfmiddlewaretoken":$("[name='csrfmiddlewaretoken']").val(),
                         "article_id":article_id

                   },
                   success:function (data) {
                       data=JSON.parse(data);

                       if (data["status"]){
                            $(".poll").children("span").text(parseInt($(".poll").children("span").text())+1)
                       }
                       else {
                           $(".poll").next(".c1").text("别,别 点!").css("color","red");
                           setTimeout(function () {
                               $(".poll").next(".c1").text("")
                           },1000)

                       }

                   }


               });

                {% else %}
                   location.href="/login{{ request.path }}";

                {% endif %}




           });




        //回复评论事件
        $('.comment_list').on('click','.reply_btn',function (){
            parent_comment_id=$(this).next().attr('class');
            father_comment_username=$(this).siblings().eq(0).text();
            $('#comment_content').val("@"+father_comment_username+"
");
        });


    

        // 提交文章 评论

            $(".ajax_comment").click(function () {

                var index=$('#comment_content').val().indexOf('
');

                var comment_content=$('#comment_content').val().substr(index+1);



                 {% if request.user.is_authenticated %}
                    $.ajax({
                           url:"/app01/comment/",
                           type:"POST",
                           data:{"csrfmiddlewaretoken":$("[name='csrfmiddlewaretoken']").val(),
                                 "article_id":article_id,
                                  "comment_content":comment_content,
                                "parent_comment_id":parent_comment_id
                           },
                           success:function (data) {

                               var temp=father_comment_username;
                               if (temp){father_comment_username="<a>@</a>"+temp}

                               alert(comment_content);

                               data = JSON.parse(data);

                               s = '<li class="list-group-item comment_item"> <a href="">{0}</a> <a href="">{1}</a> <a href="" '
                                   +' class="pull-right"&nbsp;支持</a> <a href="#comment_content" class="pull-right reply_btn">'
                                   +'回复</a> <span class="{2}"</span>  <div>  <span>{3}</span> <p>{4}</p>  </div> </li>';

                               s=s.format(
                                   '{{ request.user.username }}',
                                   data["comment_createTime"],
                                   parent_comment_id,
                                   father_comment_username,
                                   comment_content
                               );

                               $('.comment_list').append(s);
                               $('#comment_content').val("");

                               father_comment_username="";
                               parent_comment_id=0
                    }
               });

                {% else %}
                   location.href="/login{{ request.path }}";

                {% endif %}


            });
View Code
原文地址:https://www.cnblogs.com/zhaochangbo/p/7486521.html