夜猫的个人小站

       继续码起来

关于作者

微博北极熊硬糖
北京海淀区

网站建设第五天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');
            }
        })
    }

最新评论

发表评论
回到顶部