• Django具体操作(六)


    文章详情页的编写:

    {% extends "base.html" %}
    
    
    {% block content %}
        {% csrf_token %}
        <div class="article_info">
            <h3 class="text-center title">{{ article_obj.title }}</h3>
            <div class="cont">
                {{ article_obj.content|safe }}
            </div>
    
            <div class="clearfix">
                <div id="div_digg">
                    <div class="diggit action">
                        <span class="diggnum" id="digg_count">{{ article_obj.up_count }}</span>
                    </div>
                    <div class="buryit action">
                        <span class="burynum" id="bury_count">{{ article_obj.down_count }}</span>
                    </div>
                    <div class="clear"></div>
                    <div class="diggword" id="digg_tips" style="color: red;"></div>
                </div>
            </div>
    
            <div class="comments list-group">
                <p class="tree_btn">评论树</p>
                <div class="comment_tree">
    
    
                </div>
    
                <script>
    
                     $.ajax({
                            url: "/get_comment_tree/",
                            type: "get",
                            data: {
                                article_id: "{{ article_obj.pk }}"
                            },
                            success: function (comment_list) {
                                console.log(comment_list);
    
                                $.each(comment_list, function (index, comment_object) {
    
                                    var pk = comment_object.pk;
                                    var content = comment_object.content;
                                    var parent_comment_id = comment_object.parent_comment_id;
                                    var s = '<div class="comment_item" comment_id=' + pk + '><span>' + content + '</span></div>';
    
                                    if (!parent_comment_id) {
    
                                        $(".comment_tree").append(s);
                                    } else {
    
                                        $("[comment_id=" + parent_comment_id + "]").append(s);
    
                                    }
    
                                })
    
    
                            }
                        })
    
                </script>
    
    
                <p>评论列表</p>
    
                <ul class="list-group comment_list">
    
                    {% for comment in comment_list %}
                        <li class="list-group-item">
                            <div>
                                <a href=""># {{ forloop.counter }}楼</a> &nbsp;&nbsp;
                                <span>{{ comment.create_time|date:"Y-m-d H:i" }}</span>&nbsp;&nbsp;
                                <a href=""><span>{{ comment.user.username }}</span></a>
                                <a class="pull-right reply_btn" username="{{ comment.user.username }}"
                                   comment_pk="{{ comment.pk }}">回复</a>
                            </div>
    
                            {% if comment.parent_comment_id %}
                                <div class="pid_info well">
                                    <p>
                                        {{ comment.parent_comment.user.username }}: {{ comment.parent_comment.content }}
                                    </p>
                                </div>
                            {% endif %}
    
                            <div class="comment_con">
                                <p>{{ comment.content }}</p>
                            </div>
    
                        </li>
                    {% endfor %}
    
    
                </ul>
    
                <p>发表评论</p>
                <p>昵称:<input type="text" id="tbCommentAuthor" class="author" disabled="disabled" size="50"
                             value="{{ request.user.username }}">
                </p>
                <p>评论内容:</p>
                <textarea name="" id="comment_content" cols="60" rows="10"></textarea>
                <p>
                    <button class="btn btn-default comment_btn">提交评论</button>
                </p>
            </div>
            <script>
                // 点赞请求
                $("#div_digg .action").click(function () {
                    var is_up = $(this).hasClass("diggit");
    
    
                    $obj = $(this).children("span");
    
                    $.ajax({
                        url: "/digg/",
                        type: "post",
                        data: {
                            "csrfmiddlewaretoken": $("[name='csrfmiddlewaretoken']").val(),
                            "is_up": is_up,
                            "article_id": "{{ article_obj.pk }}",
                        },
                        success: function (data) {
                            console.log(data);
    
                            if (data.state) {
                                var val = parseInt($obj.text());
                                $obj.text(val + 1);
                            }
                            else {
                                var val = data.handled ? "您已经推荐过!" : "您已经反对过!";
                                $("#digg_tips").html(val);
    
                                setTimeout(function () {
                                    $("#digg_tips").html("")
                                }, 1000)
    
                            }
    
                        }
                    })
    
                })
    
                // 评论请求
                var pid = "";
    
                $(".comment_btn").click(function () {
    
                    var content = $("#comment_content").val();
    
                    if (pid) {
                        var index = content.indexOf("
    ");
                        content = content.slice(index + 1)
                    }
    
    
                    $.ajax({
                        url: "/comment/",
                        type: "post",
                        data: {
                            "csrfmiddlewaretoken": $("[name='csrfmiddlewaretoken']").val(),
                            "article_id": "{{ article_obj.pk }}",
                            "content": content,
                            pid: pid
                        },
                        success: function (data) {
    
                            console.log(data);
    
                            var create_time = data.create_time;
                            var username = data.username;
                            var content = data.content;
    
                            var s = `
                               <li class="list-group-item">
                                  <div>
    
                                      <span>${create_time}</span>&nbsp;&nbsp;
                                      <a href=""><span>${username}</span></a>
    
                                  </div>
                                  <div class="comment_con">
                                      <p>${content}</p>
                                  </div>
    
                                </li>`;
    
                            $("ul.comment_list").append(s);
    
                            // 清空评论框
                            pid = "",
                                    $("#comment_content").val("");
    
                        }
                    })
    
    
                });
    
                // 回复按钮事件
    
                $(".reply_btn").click(function () {
    
                    $('#comment_content').focus();
                    var val = "@" + $(this).attr("username") + "
    ";
                    $('#comment_content').val(val);
    
    
                    pid = $(this).attr("comment_pk");
    
    
                })
            </script>
    
        </div>
    {% endblock %}

    细节在于,在点赞的时候不必给两个按钮同时绑定事件,而是利用:

            <div class="clearfix">
                <div id="div_digg">
                    <div class="diggit action">
                        <span class="diggnum" id="digg_count">{{ article_obj.up_count }}</span>
                    </div>
                    <div class="buryit action">
                        <span class="burynum" id="bury_count">{{ article_obj.down_count }}</span>
                    </div>
                    <div class="clear"></div>
                    <div class="diggword" id="digg_tips" style="color: red;"></div>
                </div>
            </div>

    上面是点赞的编写,下面是事件的绑定,利用的是hasClass判断返回是否为空;

    $("#div_digg .action").click(function () {
                    var is_up = $(this).hasClass("diggit");

    来返回True或者是false。

     在JS中ajax如何向python插入变量一样呢?就是利用了${变量名}来进行带入,如下代码:

    $.ajax({
                        url: "/comment/",
                        type: "post",
                        data: {
                            "csrfmiddlewaretoken": $("[name='csrfmiddlewaretoken']").val(),
                            "article_id": "{{ article_obj.pk }}",
                            "content": content,
                            pid: pid
                        },
                        success: function (data) {
    
                            console.log(data);
    
                            var create_time = data.create_time;
                            var username = data.username;
                            var content = data.content;
    
                            var s = `
                               <li class="list-group-item">
                                  <div>
    
                                      <span>${create_time}</span>&nbsp;&nbsp;
                                      <a href=""><span>${username}</span></a>
    
                                  </div>
                                  <div class="comment_con">
                                      <p>${content}</p>
                                  </div>
    
                                </li>`;
    
                            $("ul.comment_list").append(s);

     注意当点击回复按钮的时候如何快速定位到回复为哪一位?

    这里在回复的标签a标签中定义了独特的属性username和comment_pk

    一个用于评论框的@一个用在判断父级标签nid

    这个就相当于不会再数据库中存储@信息了。

    没有过不去的坎,只有没加够的油!
  • 相关阅读:
    HDU 1159 Common Subsequence 动态规划
    poj2349 Arctic Network
    hdu1596 find the safest road
    poj 1011
    二进制枚举
    codeforces 626E Simple Skewness
    code for 1
    painting fence
    codeforces 797c minimal string
    POJ 3977
  • 原文地址:https://www.cnblogs.com/zhoulixiansen/p/9404575.html
Copyright © 2020-2023  润新知