网站建设第五天ajax与后端交互
标签
交换html片段
后台django代码
@csrf_exempt def category(request,cat): user = request.user if request.user.is_authenticated() else None try: cat=cat.replace('/',"") except Exception,e: return HttpResponseRedirect(reverse('homepage')) article=Article.objects.filter(category=cat) latest_article_list=article.order_by('-date_time')[:] paginator=Paginator(latest_article_list, 3) # Show 25 contacts per pagelatest_article_list sum_page=paginator.num_pages page_range=paginator.page_range if request.method=="POST": current_page=int(request.POST.get('current_page')) post_list=paginator.page(current_page) for post in post_list: post.content=post.content[0:300] return get_html(post_list) #request.method="GET": try: post_list=paginator.page(1) for post in post_list: post.content=post.content[0:300] except Exception, e: post_list="" return render(request,'blog/category.html',{'post_list':post_list,'user':user,'category':cat,'sum_page':sum_page,'page_range':page_range})
前端js代码
function get_data(current_page,url){ $.ajax({ type: "POST", data: {current_page:current_page,}, url: url, cache: false, dataType: "json", success: function(data) { //var dat=jQuery.parseJSON(data); //$('.posts').children().remove(); //$('.posts').html(dat[0].fields.content); //console.log(dat[0].fields.content); $('.posts').children().remove();// $('.posts').html(data.content_html); }, error: function (XMLHttpRequest, textStatus, errorThrown) { console.log('error'); } }) }
交换json数据
后端代码
#分页模块 from django.core.paginator import Paginator from django.db import models from django.core.serializers import serialize,deserialize from django.db.models.query import QuerySet import json @csrf_exempt def category(request,cat): user = request.user if request.user.is_authenticated() else None try: cat=cat.replace('/',"") except Exception,e: return HttpResponseRedirect(reverse('homepage')) article=Article.objects.filter(category=cat) latest_article_list=article.order_by('-date_time')[:] paginator=Paginator(latest_article_list, 3) # Show 25 contacts per pagelatest_article_list if request.method=="POST": current_page=int(request.POST.get('current_page')) post_list=paginator.page(current_page) for post in post_list: post.content=post.content[0:300] data=serialize(post_list) return HttpResponse(json.dumps(data),content_type="application/json") #注意jQuery.parseJSON处理后端json.dumps({'post_list':post_list})没问题,但是处理 {'post_list':post_list,'state:'success'}就会报错 #### 如果没有使用paginator分页,将QuerySet序列化成json数据 ###将models里的单个对象或者queryset序列化(不能对paginator使用) #<class 'django.core.paginator.Page'>,不是QueryaSet实例,因此无法调用to_json,不过无论post_list含有几个对象,都可以用serialize序列化 #若是post_list=paginator.page(num),直接使用data=serialize('json',post_list) def to_json(obj): # serialize queryset if isinstance(obj,QuerySet): return serialize('json', obj) # serialize object if isinstance(obj,models.Model): return serialize('json',[obj,])
前端代码
function get_data(current_page,url){ $.ajax({ type: "POST", data: {current_page:current_page,}, url: url, cache: false, dataType: "json", success: function(data) { var dat=jQuery.parseJSON(data); console.log(dat[0].fields.author) }, error: function (XMLHttpRequest, textStatus, errorThrown) { console.log('error'); } }) }
最新评论