首页 > 代码库 > 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使用模板进行动态局部刷新
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。