当我使用Django模板渲染器渲染一个页面时,我可以传入一个包含各种值的字典变量,使用{{myVar}}在页面中操作它们。
是否有一种方法可以在Javascript中访问相同的变量(可能使用DOM,我不知道Django如何使变量可访问)?我希望能够根据传入的变量中包含的值使用AJAX查找详细信息。
当我使用Django模板渲染器渲染一个页面时,我可以传入一个包含各种值的字典变量,使用{{myVar}}在页面中操作它们。
是否有一种方法可以在Javascript中访问相同的变量(可能使用DOM,我不知道Django如何使变量可访问)?我希望能够根据传入的变量中包含的值使用AJAX查找详细信息。
当前回答
有许多答案指向json_script。与人们可能认为的相反,这并不是一个万能的解决方案。
例如,当我们想要将在For循环中生成的动态变量传递给JavaScript时,最好使用data-attributes之类的东西。
点击这里查看更多细节。
其他回答
Javascript中有两件事对我有用:
'{{context_variable|escapejs }}'
及其他: 在views.py
from json import dumps as jdumps
def func(request):
context={'message': jdumps('hello there')}
return render(request,'index.html',context)
在html中:
{{ message|safe }}
对于字典,最好先编码成JSON。你可以使用simplejson.dumps(),或者如果你想从App Engine中的数据模型转换,你可以使用GQLEncoder库中的encode()。
如果你想通过将变量作为参数直接发送给函数,那么试试这个
<input type="text" onkeyup="somefunction('{{ YOUR_VARIABLE }}')">
从前面的回答来看,安全性可以得到改进
我发现我们可以这样传递Django变量到javascript函数:-
<button type="button" onclick="myJavascriptFunction('{{ my_django_variable }}')"></button>
<script>
myJavascriptFunction(djangoVariable){
alert(djangoVariable);
}
</script>
我也遇到过类似的问题,S.Lott提出的答案对我很有用。
<script type="text/javascript">
var a = "{{someDjangoVariable}}"
</script>
然而,我想在这里指出主要的执行限制。 如果你打算把javascript代码放在不同的文件中,并将该文件包含在你的模板中。这行不通。
只有当你的主模板和javascript代码在同一个文件中,这才会起作用。 也许django团队可以解决这个限制。