我想将数组传递给模板,然后通过 JavaScript 使用它。
在我的views.py中,我有:
arry1 = ['Str',500,20]
return render_to_response('test.html', {'array1': arry1})
在我的模板中:
var array1 = {{ array1 }};
但是当我访问该网站时,它会输出:
var array1 = ['Str',500,20];
我必须改变什么?
我想将数组传递给模板,然后通过 JavaScript 使用它。
在我的views.py中,我有:
arry1 = ['Str',500,20]
return render_to_response('test.html', {'array1': arry1})
在我的模板中:
var array1 = {{ array1 }};
但是当我访问该网站时,它会输出:
var array1 = ['Str',500,20];
我必须改变什么?
尝试使用{{ array1|safe }}
,看看是否有什么不同。
如前所述,您可以使用|safe
过滤器,这样 Django 就不会清理数组并保持原样。
另一种选择,从长远来看可能更好的是使用simplejson
模块(它包含在 django 中)将您的 Python 列表格式化为 JSON 对象,您可以在其中返回 Javascript。您可以像遍历任何数组一样遍历 JSON 对象。
from django.utils import simplejson
list = [1,2,3,'String1']
json_list = simplejson.dumps(list)
render_to_response(template_name, {'json_list': json_list})
在您的 Javascript 中,只需{{ json_list }}
在 Django 中:
from django.utils import simplejson
json_list = simplejson.dumps(YOUR_LIST)
并在上下文中传递“json_list”
在 JS 中:
var YOUR_JS_LIST = {{YOUR_LIST|safe}};
不确定何时将其添加到 Django,相同结果的候选是json-script:
{{ value|json_script:"hello-data" }}
如果 value 是字典 {'hello': 'world'},输出将是:
<script id="hello-data" type="application/json">{"hello": "world"}</script>
可以像这样在 JavaScript 中访问结果数据:
const value = JSON.parse(document.getElementById('hello-data').textContent);
在 4.0 之后的 Django 版本中,上述情况中的 ID 和“hello-data”将是可选的。
它可以通过 django 核心序列化程序来完成。您需要做的就是在 json 中序列化您的数据,然后将其传递给模板。
data = serializers.serialize("json", <list>)
return render(request, 'view.html', {'data':data})
在您的模板中将此列表保存到 javascript 变量中。
var list = {{data|safe}}