我的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']]”]
以下是我想要的内容
['巴黎','里昂']
它必须简单但我无法弄清楚如何做到这一点。 其他帖子不处理字符串列表。
知道我该怎么办?
答案 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 OSWASP和Django ticket 17419上的讨论。要阻止XSS,您可以使用类似SafeJSONEncoder from the django-cms project。
的内容