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

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

想学习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

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

客户端Form表单

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

提交评论的JS代码

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

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

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

Django的模板

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

Django的views

1@csrf_exempt2defget_blog_all_contents(request):3response =HttPResponse()4response['Content-Type'] ="text/json"5strId = request.POST.get("blog_id",'')6ifstrId:7try:8blog_id =int(strId)9item = Blog.objects.get(id=blog_id)10list_contents = item.blogcontent_set.order_by('date','time')11returnrender_to_response("blogContentList.html", locals())12exceptException, e:13print(e)14return""

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航