为了避免刷新页面,是的,您需要 AJAX。我通常不喜欢在答案中过多地建议库,但是,为了易于跨浏览器兼容,我建议使用jQuery。
使用 jQuery 就这么简单
在你的 django 模板中
<html>
...
<head>
<script>
var URL = "{% url 'my_view_that_updates_pieFact' %}";
</script>
</head>
...
稍后...
您需要通过 AJAX 将数据 POST 或 GET 到服务器。为了更加 RESTful,每当我需要向服务器发送数据时,我都会使用 POST。 jQuery 提供了$.post() 便利函数,通过 POST 将 AJAX 数据发送到 url。这三个参数是 URL、要发送的数据(作为 JavaScript 对象;如果您对 JavaScript 不太熟悉,请考虑 Python 字典)以及服务器发送回响应后的回调函数。
<script>
function updatePieFact(){
var data = {'pieFact': pieFact};
$.post(URL, data, function(response){
if(response === 'success'){ alert('Yay!'); }
else{ alert('Error! :('); }
});
}
.click() 函数与在 html 属性中指定 onlick 基本相同。两个点击事件都会按照您的预期更新pieFact,然后调用updatePieFact() 将pieFact 的值发送到服务器。
$(document).ready(function(){
$('#bttnMinus').click(function(){
pieFact *= 0.9;
updatePieFact();
});
$('#bttnPlus').click(function(){
pieFact *= 1.1;
updatePieFact();
});
});
</script>
在views.py中
由于我在 JavaScript 中使用了$.post() 函数,Django 将要接收的请求将具有"POST" 的方法,因此我检查以确保该方法确实是POST (这意味着如果有人通过 GET 请求访问此视图的 URL,他们将不会更新任何内容)。一旦我看到请求实际上是一个POST,我就会检查密钥'pieFact' 是否在字典request.POST 中。
还记得我在javascript中将变量data设置为{'pieFact': pieFact}吗?那个 javascript 就变成了 request.POST python 字典。因此,如果在 javascript 中我改用 var data = {'hello': pieFact};,那么我将改为检查 if 'hello' in request.POST。一旦我看到 pieFact 在 request.POST 字典中,我就可以获取它的值,然后用它做一些事情。如果一切顺利,我会返回一个带有字符串'success' 的HttpResponse。这与 javascript 中的检查相关:if(response === 'success')。
def my_view_that_updates_pieFact(request):
if request.method == 'POST':
if 'pieFact' in request.POST:
pieFact = request.POST['pieFact']
# doSomething with pieFact here...
return HttpResponse('success') # if everything is OK
# nothing went well
return HttpRepsonse('FAIL!!!!!')
希望这会让你找到正确的方向。