我正在使用Django创建一个网站,我希望用户能够按下一个按钮,该按钮会将一些数据发送到我的服务器,例如,使用HTTP post请求向数据库添加条目。我可以通过创建HTML表单来完成此操作,并在action属性中指向将执行数据处理的视图,然后呈现模板。
但是,如果我不想渲染模板怎么办?如果我希望用户单击按钮来处理服务器上的某些数据,但我不想通过视图函数渲染新模板,那么如何做呢?我想在浏览器中维护当前呈现的HTML,但我知道将数据发送到服务器的唯一方法是在视图函数中呈现新模板。
有任何帮助吗?感谢。
答案 0 :(得分:1)
Django中没有任何内容表示视图必须呈现模板。这只是视图可以做的很多事情之一。视图只需返回HttpResponse。
HttpResponse正文是否包含HTML等,完全取决于您。您也不需要表单将数据发布到您的服务器。您只需使用JavaScript即可发送任何您需要的任意数据。你仍然可以使用输入,textarea等表单元素;它们不必包含在表单元素中以保证有效。
要做出简短的回答,您需要使用JavaScript通过ajax将数据发送到Django应用程序,处理数据,并以JSON或XML格式返回响应,然后您可以使用它来更新页面等你可以编写vanilla JavaScript来执行此操作,或者使用像jQuery这样的库,或者如果你真的非常懒,你可以使用像Dajax这样的东西。
答案 1 :(得分:0)
只需从您的观点中回复204 No Content。
答案 2 :(得分:0)
正如我在之前的回答中所说,在Django中执行此操作的正常方法是发布到相同的视图,该视图接受数据然后重新呈现相同的模板(例如显示错误)或重定向到另一个网址。
另一种方法是使用Ajax进行发布。
答案 3 :(得分:0)
您可以通过向服务器发送ajax请求来实现此目的
在这里你需要编写一个ajax请求,它将执行django视图并将响应返回到json,xml格式。
您可以根据需要在模板中显示最新数据
Ajax请求
function mail_check() { var val = $("#val").val(); $.getJSON('/test/'+val+"/", function(data) { // render changes content });}
Django视图
def checkemailavailability(request, val): message = {'result':''} if request.is_ajax(): # put logic here #json = simplejson.dumps() convert data into json return HttpResponse(json, mimetype='application/json')
注意:不要忘记包含jquery
链接:stackoverflow,tangowith django,bradmontgomery.net