我查看了很多答案和其他网站,但没有一个能回答我的具体问题。我有一个带有“+”和“-”按钮的网页,它应该增加一个名为“pieFact”的变量。此变量必须动态更新,而不必刷新页面。每次更改值时,它都应该传递到我的 Django View 。这将用于更新 web map 中饼图的大小。我有以下内容:
<button type="button" id=bttnMinus onclick="pieFact=pieFact*0.9">-</button>
<button type="button" id=bttnPlus onclick="pieFact=pieFact*1.1">+</button></td>
<script type="text.javascript">
var pieFact=0;
</script>
如何将“pieFact”的值传递给 Django?根据我有限的知识,我认为我可能必须使用 AJAX post/get。
最佳答案
为了避免刷新页面,是的,您将需要 AJAX。我通常不喜欢在答案中过多地建议库,但是,为了轻松实现跨浏览器兼容,我建议使用 jQuery .
使用 jQuery 就很简单了
在你的 django 模板中
<html>
...
<head>
<script>
var URL = "{% url 'my_view_that_updates_pieFact' %}";
</script>
</head>
...
稍后...
您需要通过 AJAX 将数据发布或获取到服务器。为了更加 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 请求之类的内容访问此 View 的 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!!!!!')
希望这能让您指明正确的方向。
关于javascript - 将动态 Javascript 变量传递给 Django/Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24152420/