0

是否有 django 函数来检测是否发送了 ajax 查询$.get?让我解释...

我将 Ajax 用于两件事:

1/ 从我的菜单中显示每个页面的内容$.get(已经实现,在我开始开发第二点之前效果很好)

2/ 在表单中,当我点击一个按钮时,我$.ajax用来显示成功或错误消息(目前正在开发中)

在第一点结束时,我的观点没有改变。最后一行:

return render_to_response('auth/index.html', response_dic, context_instance=RequestContext(request))

但是我不得不为第二点改变它:

if request.is_ajax():
    #transform the data to json so it can be used in jquery
    return HttpResponse(simplejson.dumps(response_dic), mimetype='application/json')
#normal post with reload
else:
    return render_to_response('auth/index.html', response_dic, context_instance=RequestContext(request))

但是现在当我点击我的菜单链接时,什么都没有显示了!我想我知道为什么:我用$.get. 在我看来,request.is_ajax()返回True,因此它不会按应有的方式呈现视图(它返回HttpResponse而不是返回render_to_response)!

所以我重复我的问题:是否有一个函数可以检测 ajax 是否与 a 一起使用GET?如果不清楚,请询问我更多详细信息!这是我的 jQuery 函数:

//load the content of the page (right side) with Ajax (no need to reload the menu and header)
function load_content(link)
{
    $.get(link, function(data)
    {
        var title=$(data).find("#title");
        var content=$(data).find("#content");
        $("#title_base").html(title);
        $("#content_base").html(content);
    });

    //change the active link in the menu
    $('.active').removeClass('active');
    //~ $(this).addClass("active");
    $('#menu a[href*="' + link.split("/")[2] + '"][class!="noselect"]').parent().addClass('active');
}

想法:我应该使用两种不同的视图吗?

4

2 回答 2

0

来自函数的文档$.get() “这是一个简写的 Ajax 函数,相当于:$.ajax(...)”。所以真的没有区别。

如果您希望对它们进行不同的处理,您必须自己创建差异 - 通过调用不同的 URL(视图)或通过传递不同的参数。

于 2013-08-31T08:40:11.613 回答
0

**

解决了!

**

request.GET正如建议的mariodev,我只需要使用。我的观点:

def login_view(request):

    logout(request)
    response_dic={}

    if request.POST:
        #page posted and processed with ajax
        ...
        #transform the data to json so it can be used in jquery
        return HttpResponse(simplejson.dumps(response_dic), mimetype='application/json')


    #displays the page (GET)
    return render_to_response('auth/index.html', response_dic, context_instance=RequestContext(request))
于 2013-08-31T10:11:15.303 回答