使用 ajax 时,Django 视图不呈现模板

Posted

技术标签:

【中文标题】使用 ajax 时,Django 视图不呈现模板【英文标题】:Django view is not rendering a template when using ajax 【发布时间】:2018-04-06 12:23:34 【问题描述】:

当我单击另一个模板中的按钮时,我试图在视图中呈现一个模板。我对视图中的方法进行了 ajax 调用,但我不确定它有什么问题。我无法渲染另一个模板,我做错了什么吗?

my view.py

@csrf_exempt
def checkLogin (request):
    if request.is_ajax():
        param = request.POST.get('param', None)
        param1 = request.POST.get('param1', None)
        if (param=="admin" and param1=="admin"):
            Datenow = datetime.datetime.now().strftime('%H:%M:%S')
            return render(request,'sample/test.html','Datenow': Datenow)
        else:
            Datenow = datetime.datetime.now().strftime('%H:%M:%S')
            return render(request,'sample/login.html','Datenow': Datenow)
    return HttpResponseBadRequest()

这是我模板中的 ajax 调用:

    loginbt.onclick = function()  
            var uName = $('#username').val();
            var pWord = $('#password').val();
            $.ajax(type: 'POST',
            url: '/sample/checkLogin/',                            // some data url
            data: param: uName, param1: pWord,       // some params  
            success: function (response)                   // callback
                if (response.result === 'OK') 
                    if (response.data && typeof(response.data) === 'object') 
                       window.alert("its working");
                    
                 else 
                    // handle an unsuccessful response
                
            
           );

当我单击模板中的按钮时,我得到了200 OK 结果,但模板并没有改变。任何建议都会有所帮助。

【问题讨论】:

你的window.alert事件触发成功了吗? 您的代码中没有任何内容会导致模板在任何地方显示?如果你想用模板响应更新 HTML,你需要在你的成功函数中这样做。 你认为你的页面为什么会改变?您将 HTML 文档返回给 ajax 函数,而该函数除了显示警报之外什么都不做。使用 ajax,您的 django 视图应该返回一个 JSON 文档,以便您的 ajax 函数可以处理它并相应地更改 HTML DOM 树。 @souldeux,不,不是 @solarissmoke 是的,但是在 onsuccess 方法中没有触发 window.alert 【参考方案1】:

需要修复ajax调用的js回调。

您正在从 django 返回一些 html,在您的 js 回调中,您正在测试响应,因为它是 JSON 数据。

if (response.result === 'OK') 
   if (response.data && typeof(response.data) === 'object')

您正在检查这样的 JSON 结构:


   result: "OK",
   data: 
   

请适当地修正您的代码。

【讨论】:

我是新手,你能帮我看看到底是什么问题吗??

以上是关于使用 ajax 时,Django 视图不呈现模板的主要内容,如果未能解决你的问题,请参考以下文章

Django 的 Ajax 视图

django使用模板视图和ajax

我正在尝试使用 AJAX 将已呈现的 Django 模板注入我的页面的一部分

django基础知识之Ajax:

django之jquery完成ajax

Django:在 AJAX 请求后加载模板