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

标签 javascript jquery python ajax django

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

相关文章:

javascript - 如何通过代码覆盖皮肤的设置?

javascript - Jquery 不会选择并将我想要的样式添加到我的元素

python - 使用 Openpyxl 将特定列从一个工作簿复制到另一个工作簿

python - 如何在两个类之间调用方法?

javascript - 从多个数组中获取具有非重复值的数组

javascript - 在 jQuery 中获取链接的原始值并更新

javascript - sweetalert2 : how to get autofocus on input?

javascript - 在大量 div 中插入图像源(最好的方法)

javascript - 在Javascript中使用三元运算符将字符串转换为 bool 值?

python - SWIG:如何使用 %apply 返回结构? 'No typemaps defined' 警告