我的 Django 对象有一个属性“City”。我正在尝试获取城市列表并使用 Jquery 在模板中捕获它(以在 X 轴上的图表中使用)。
我的问题是我无法去掉列表的 unicode 和引号。
(我设法为一个单一的值(value)做到这一点)。相反,我坚持这个:
[[[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读取 View 发送的上下文的方式
[[[u'Paris'], [u'Lyon']]"]
这是我想要得到的
['巴黎', '里昂']
这一定很简单,但我就是不知道该怎么做。 其他帖子不处理字符串列表。
知道我该怎么做吗?
最佳答案
当您在模板中执行 {{ city_array }}
时,您的列表将转换为字符串。这是通过在列表上调用 repr()
来完成的,它会递归地对其内容调用 repr()
。因为您的字符串是 unicode,所以您会看到那些 unicode 文字,u'Paris'
。
执行此操作的“正确”方法是将您的数据编码为 json,例如在您的 View 中:
import json
# ...
json_cities = json.dumps(city_array)
# ...
return render (request, 'plot3/plot_page.html', {"city_array" : json_cities})
然后做
var cities = {{ city_array|safe }};
在模板中。
请注意:不要将此用于用户 Controller 数据!请参阅 XSS Cheat Sheet by OSWASP以及关于 Django ticket 17419 的讨论了解更多信息。为了防止 XSS,你可以使用类似 SafeJSONEncoder from the django-cms project 的东西。 .
关于javascript - 将字符串列表从 Django 传递到 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21150133/