gpt4 book ai didi

javascript - 将动态 Javascript 变量传递给 Django/Python

转载 作者:太空狗 更新时间:2023-10-29 21:22:16 26 4
gpt4 key购买 nike

我查看了很多答案和其他网站,但没有一个能回答我的具体问题。我有一个带有“+”和“-”按钮的网页,它应该增加一个名为“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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com