56

我想将数组传递给模板,然后通过 JavaScript 使用它。

在我的views.py中,我有:

arry1 = ['Str',500,20]
return render_to_response('test.html', {'array1': arry1})

在我的模板中:

var array1 = {{ array1 }};

但是当我访问该网站时,它会输出:

var array1 = ['Str',500,20];

我必须改变什么?

4

6 回答 6

108

尝试使用{{ array1|safe }},看看是否有什么不同。

于 2009-04-11T12:22:38.403 回答
19

如前所述,您可以使用|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 }}

于 2009-04-11T12:26:20.890 回答
7

在 Django 中:

from django.utils import simplejson
json_list = simplejson.dumps(YOUR_LIST)

并在上下文中传递“json_list”

在 JS 中:

var YOUR_JS_LIST = {{YOUR_LIST|safe}}; 
于 2013-01-25T20:47:12.017 回答
0

只需尝试替换var array1 = {{ array1 }};var array1 = '{{ array1|safe }}';. 我不知道为什么,但这对我有用。 在此处输入图像描述

于 2021-06-02T16:08:58.167 回答
0

不确定何时将其添加到 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”将是可选的。

于 2022-01-25T17:12:46.767 回答
-1

它可以通过 django 核心序列化程序来完成。您需要做的就是在 json 中序列化您的数据,然后将其传递给模板。

data = serializers.serialize("json", <list>)
return render(request, 'view.html', {'data':data})

在您的模板中将此列表保存到 javascript 变量中。

var list = {{data|safe}}
于 2016-05-20T06:30:54.253 回答