将Django中的字符串列表传递给Javascript

时间:2014-01-15 23:02:43

标签: javascript jquery django unicode

我的Django对象有一个属性“City”。我正在尝试获取城市列表并使用Jquery在模板中捕获它(在X轴上的图表中使用)。
我的问题是我无法摆脱unicode并引用列表。
(我设法为一个单一的价值做)。相反,我坚持这一点:
[“[[u'Paris'],[u'Lyon']]”]

我尝试了很多东西,包括JSON。没有成功。

我的观点: (实际上,其中一个尝试..)

def barchart1(request):
    city_array =[]
    for i in [1,MyObject.objects.count()]:
        objet = get_object_or_404(MyObject, pk=i)

        cities = [objet.city.city_name]
        city_array.append(cities)

return render (request, 'plot3/plot_page.html', {"city_array" : city_array}) 

我的JS:

<script type="text/javascript">
    var cities = ["{{ city_array }}"];
</script>

以下是JS如何阅读视图发送的上下文
[“[[u'Paris'],[u'Lyon']]”]

以下是我想要的内容
['巴黎','里昂']

它必须简单但我无法弄清楚如何做到这一点。 其他帖子不处理字符串列表。

知道我该怎么办?

1 个答案:

答案 0 :(得分:21)

在模板中执行{{ city_array }}后,您的列表将转换为字符串。这是通过在列表上调用repr()来完成的,该列表以递归方式调用其内容上的repr()。因为你的字符串是unicode,所以你会看到那些unicode文字,u'Paris'

&#34;正确&#34;这样做的方法是将数据编码为json,例如在您的视图中:

import json
# ...
json_cities = json.dumps(city_array)
# ...
return render (request, 'plot3/plot_page.html', {"city_array" : json_cities})

然后再做

var cities = {{ city_array|safe }};

在模板中。

请注意:不要将其用于用户控制器数据!有关详细信息,请参阅XSS Cheat Sheet by OSWASPDjango ticket 17419上的讨论。要阻止XSS,您可以使用类似SafeJSONEncoder from the django-cms project

的内容