首页 > 代码库 > Django使用模板进行动态局部刷新

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 = http://www.mamicode.com/$("#content_value").val(); 5             var blog_id = $("#blog_id").val() 6             $(this).ajaxSubmit({ 7                 type:"post",  //提交方式 8                 dataType:"text", //数据类型 9                 url:"/content/", //请求url10                 data: {11                 ‘username‘: username,12                 ‘content_value‘: content_value,13                 ‘blog_id‘:blog_id14                 },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/", //请求url12             data: {13                 ‘blog_id‘: blog_id14             },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 ""

 

Django使用模板进行动态局部刷新