当我使用Django模板渲染器渲染一个页面时,我可以传入一个包含各种值的字典变量,使用{{myVar}}在页面中操作它们。

是否有一种方法可以在Javascript中访问相同的变量(可能使用DOM,我不知道Django如何使变量可访问)?我希望能够根据传入的变量中包含的值使用AJAX查找详细信息。


当前回答

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 }}

其他回答

注意,如果你想将一个变量传递给外部的.js脚本,那么你需要在你的script标记之前加上另一个声明全局变量的script标记。

<script type="text/javascript">
    var myVar = "{{ myVar }}"
</script>

<script type="text/javascript" src="{% static "scripts/my_script.js" %}"></script>

数据像往常一样在视图中的get_context_data中定义

def get_context_data(self, *args, **kwargs):
    context['myVar'] = True
    return context

您可以组装整个脚本,其中数组变量是在字符串中声明的,如下所示:

views.py

    aaa = [41, 56, 25, 48, 72, 34, 12]
    prueba = "<script>var data2 =["
    for a in aaa:
        aa = str(a)
        prueba = prueba + "'" + aa + "',"
    prueba = prueba + "];</script>"

这将生成如下所示的字符串

prueba = "<script>var data2 =['41','56','25','48','72','34','12'];</script>"

获得该字符串后,必须将其发送到模板

views.py

return render(request, 'example.html', {"prueba": prueba})

在模板中,您接收到它,并以一种文学的方式将其解释为HTM代码,例如,就在需要它的javascript代码之前

模板

{{ prueba|safe  }}

下面是代码的其余部分,请记住在示例中使用的变量是data2

<script>
 console.log(data2);
</script>

这样就可以保持数据的类型,在本例中是一种安排

对于字典,最好先编码成JSON。你可以使用simplejson.dumps(),或者如果你想从App Engine中的数据模型转换,你可以使用GQLEncoder库中的encode()。

一个对我有用的解决方案是在模板中使用隐藏的输入字段

<input type="hidden" id="myVar" name="variable" value="{{ variable }}">

然后以这种方式获取javascript的值,

var myVar = document.getElementById("myVar").value;

有许多答案指向json_script。与人们可能认为的相反,这并不是一个万能的解决方案。

例如,当我们想要将在For循环中生成的动态变量传递给JavaScript时,最好使用data-attributes之类的东西。

点击这里查看更多细节。