使用 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 视图不呈现模板的主要内容,如果未能解决你的问题,请参考以下文章