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

我的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:

  var cities = ["{{ city_array }}"];  

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

这是我想得到的
[‘巴黎’,’里昂’]

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

知道我该怎么办?

在模板中执行{{ 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}) 

然后呢

 var cities = {{ city_array|safe }}; 

在模板中。

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