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

xav*_*nel 9 javascript django unicode jquery

我的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}) 
Run Code Online (Sandbox Code Playgroud)

我的JS:

<script type="text/javascript">
    var cities = ["{{ city_array }}"];
</script>
Run Code Online (Sandbox Code Playgroud)

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

这就是我想要的
['巴黎','里昂']

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

知道我该怎么办?

sk1*_*k1p 21

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

执行此操作的"正确"方法是将数据编码为json,例如在您的视图中:

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

然后呢

var cities = {{ city_array|safe }};
Run Code Online (Sandbox Code Playgroud)

在模板中.

请注意:请勿将此用于用户控制器数据!有关详细信息,请参阅OSWASPXSS备忘单和关于Django ticket 17419的讨论.要防止XSS,您可以使用django-cms项目中SafeJSONEncoder之类的东西.