zoukankan      html  css  js  c++  java
  • Django使用模板进行动态局部刷新

    想学习python,但是找不到方向,最近想突然对web编程感兴趣了,所有一直在看,刚刚对着教程做了一点东西。

    使用Django提交评论时,如果使用Form提交评论信息,那么提交成功后,最好是能把刚刚输入的评论信息显示出来;

    所以提交评论信息后,最好能马上将评论内容显示出来。

    当时考虑了3种方法:

    1、最开始考虑使用Ajax+json,从服务器读取最新的一条评论信息,当多个用户同时提交评论的时候,这种办法会出现不同步的现象,pass掉;

    2、还是使用Ajax+json,客户端传递当前页面的评论数量,服务端将客户端未显示的评论全部返回,在ajax的回调函数中加载这些评论;

    3、客户端通过ajax向服务器取评论信息,服务器使用模板将评论内容全部渲染为html文本内容,并将内容返回到客户端,客户端将收到的HTML文本插入DIV中。

    在方法1和2中,需要在JS代码中解析JSON数据并根据JSON数据生成HTML内容,使用方法3可以使用模板统一处理;相对于处理JSON数据和渲染模板,方法3会加重服务器负担。

    下面是代码:

    评论的mudel

    1 class BlogContent(models.Model):
    2     blog = models.ForeignKey(Blog)
    3     auth = models.CharField('昵称', max_length=40)
    4     contents = models.TextField('内容',max_length=2000)
    5     time = models.TimeField(auto_now_add=True)
    6     date = models.DateField(auto_now_add=True)

    客户端Form表单

    {# 下面是评论输入区域 #}
        <div id="blogComment">
            <form id="user_content">
                <div>昵称 <input type="text" id="username" value="匿名"><p/></div>
                <textarea id="content_value"></textarea><p/>
                <input type="text" id="blog_id" value="{{ item.id }}" style="display:none;"/>
                <input type="submit" id="content_submit" value="提交评论"/>
            </form>
        </div>

    提交评论的JS代码

     1  $(function() {
     2         $("#user_content").submit(function(){
     3             var username = $("#username").val();
     4             var content_value = $("#content_value").val();
     5             var blog_id = $("#blog_id").val()
     6             $(this).ajaxSubmit({
     7                 type:"post",  //提交方式
     8                 dataType:"text", //数据类型
     9                 url:"/content/", //请求url
    10                 data: {
    11                 'username': username,
    12                 'content_value': content_value,
    13                 'blog_id':blog_id
    14                 },
    15                 success:function(data){ //提交成功的回调函数
    16                     loadNewContents()
    17                     $("#content_value").val("");
    18                 }
    19             });
    20             return false; //不刷新页面
    21         });
    22     });

    从服务器读取全部评论信息并进行显示的JS代码

     1  //加载最新的评论
     2     function loadNewContents()
     3     {
     4         var lstContent = $("#lstContents");
     5         //lstContent.html("");
     6 
     7         var blog_id = $("#blog_id").val()
     8         $(this).ajaxSubmit({
     9             type: "post",  //提交方式
    10             dataType: "text", //数据类型
    11             url: "/allcontent/", //请求url
    12             data: {
    13                 'blog_id': blog_id
    14             },
    15             success: function (data) { //提交成功的回调函数
    16                 if(data.length >0)
    17                 {
    18                      $("#lstContents").html(data);
    19 
    20                 }
    21             }
    22         });
    23     }

    Django的模板

    1 {% for item in list_contents %}
    2     <div class="content">
    3         <div class="content_info">#{{  forloop.counter }}楼 {{ item.auth }} 发表于 {{ item.date }} {{ item.time }}<p/></div>
    4         <div class="content_value">{{ item.contents }}</div>
    5         <div class="content_option"><a href="#">回复</a><a href="#">引用 </a></div>
    6     </div>
    7 {% endfor %}

    Django的views

     1 @csrf_exempt
     2 def get_blog_all_contents(request):
     3     response = HttpResponse()
     4     response['Content-Type'] = "text/json"
     5     strId = request.POST.get("blog_id", '')
     6     if strId:
     7         try:
     8             blog_id = int(strId)
     9             item = Blog.objects.get(id=blog_id)
    10             list_contents = item.blogcontent_set.order_by('date', 'time')
    11             return render_to_response("blogContentList.html", locals())
    12         except Exception, e:
    13             print(e)
    14     return ""
  • 相关阅读:
    每日口语(6.12)
    The usage of thumb
    Chart相关网站
    每日口语(6.14)
    我为世界杯狂
    一个很简单的javascript问题,看你能否答对
    【转】理解伪元素:Before和:After
    JS BOM之location.hash详解
    JS BOM之location对象
    JS BOM之location.hash的用法
  • 原文地址:https://www.cnblogs.com/mandaren/p/3963286.html
Copyright © 2011-2022 走看看