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

我看了很多答案和其他网站,但没有人回答我的具体问题。 我有一个带有“+”和“ – ”按钮的网页,它应该增加一个名为“pieFact”的变量。 必须动态更新此变量,而无需刷新页面。 每次更改值时,都应将其传递给我的Django视图。 这将用于更新Web地图中饼图的大小。 我有以下内容:

   var pieFact=0;  

如何将“pieFact”的值传递给Django? 基于我有限的知识,我想我可能不得不使用AJAX post / get。

为了避免刷新页面,是的,您将需要AJAX。 我通常不喜欢在答案中建议库太多,但是,为了便于跨浏览器兼容,我建议使用jQuery 。

使用jQuery就可以了

在你的django模板里面

  ...    ... 

稍后的…

您需要通过AJAX将数据POST或GET到服务器。 为了更加RESTful,每当我需要将数据发送到服务器时,我都使用POST。 jQuery通过POST为AJAX数据提供了$ .post()方便的function。 这三个参数是URL,要发送的数据(作为JavaScript对象;如果您不熟悉JavaScript,请考虑python词典),以及服务器发回响应后的回调函数。

  

.click()函数与在html属性中指定onlick基本相同。 两个click事件pieFact按预期更新pieFact ,然后调用updatePieFact()pieFact的值发送到服务器。

 $(document).ready(function(){ $('#bttnMinus').click(function(){ pieFact *= 0.9; updatePieFact(); }); $('#bttnPlus').click(function(){ pieFact *= 1.1; updatePieFact(); }); });  

在views.py中

由于我在JavaScript中使用了$.post()函数,Django将要接收的请求将有一个"POST"方法,所以我检查以确保该方法确实是POST (这意味着如果有人使用GET请求访问此视图的URL,他们将不会更新任何内容)。 一旦我看到请求实际上是一个POST ,我检查是否键'pieFact'在dict 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!!!!!') 

希望这会让你指出正确的方向。