将字符串列表从 Django 传递到 Javascript

Posted

技术标签:

【中文标题】将字符串列表从 Django 传递到 Javascript【英文标题】:Pass a list of string from Django to Javascript 【发布时间】:2014-02-04 16:08:06 【问题描述】:

我的 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']]"]

这是我想要得到的东西 ['巴黎','里昂']

这一定很简单,但我就是不知道该怎么做。 其他帖子不处理字符串列表。

知道我应该怎么做吗?

【问题讨论】:

你尝试 json 时什么不起作用? 【参考方案1】:

当您在模板中执行 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 ;

在模板中。

请注意:请勿将其用于用户控制器数据!请参阅XSS Cheat Sheet by OSWASP 和Django ticket 17419 上的讨论以获取更多信息。为了防止 XSS,您可以使用 SafeJSONEncoder from the django-cms project 之类的东西。

【讨论】:

完美!实际上,我尝试了类似的方法,但我没有设置 |safe。它是如何工作的 ? 4 小时后,欢迎您的帮助! safe 模板过滤器是一种禁用 Django 内置 HTML 转义的方法,这是一种防止 XSS attacks 的方法。你可以阅读更多in the documentation,但至少要记住这一点:只有在你绝对确定没有不受信任的用户输入最终会在输出中未转义时才使用safe(在这种情况下,json.dumps(...) 会处理它给你)。 @sana 恐怕我对json.dumps 的 XSS 安全性有误 - 请查看编辑!

以上是关于将字符串列表从 Django 传递到 Javascript的主要内容,如果未能解决你的问题,请参考以下文章

如何传递从 django 表单操作 url 的下拉列表中选择的项目的 ID?

将 Javascript 计算传递给 Django 后端

如何将数据从 django 传递到引导模式?

将 Django 字符串列表作为数组传递给 JS

通过jQuery ajax调用将值列表传递给django视图

Django将对象列表传递给模板