将 DJango 列表的数据传递到 javascript 列表时出错

Posted

技术标签:

【中文标题】将 DJango 列表的数据传递到 javascript 列表时出错【英文标题】:Getting error while passing data of DJango list to javascript list 【发布时间】:2012-07-07 20:28:21 【问题描述】:

我有一个 python-Django 列表:

list_a = ['user_a', 'user_b']

现在我使用以下代码将其渲染为模板:

extra_context = 
    'a': list_a

return direct_to_template(request, 'mytemplate.html', extra_context)

在我的模板中,我编写了以下 java 脚本代码来将 list_a Django-list 传递给 Js-list:

var user = [% for i in user_list % i % if forloop.last %%else%,%endif%% endfor %];

但是当我打开模板时。它显示以下错误(使用 Inspect 元素检查):

Uncaught ReferenceError : user_a is not defined

我尝试使用Inspect Element 打印驻留在javascript 中的user 变量。它打印正确的值,即

var user = [user_a, user_b]

我不明白为什么会这样:(

【问题讨论】:

你的 Javascript 应该如何知道 'user_a' 是什么? @DanielRoseman 我没找到你。我刚刚使用 Chrome 中的 Fire bug 或 Inspected element 工具检查了这些错误 @AmitPal 对,所以var user = [user_a, user_b],但是user_auser_b 是什么?这些内部名称未定义,因此出现错误。 @kojiro 哦!我明白了,但是我应该如何拒绝,因为它是从 python 中的数据库中获取的动态列表。我是 Javascript 的新手。我该怎么办?是否可以将这些作为字符串传递? 【参考方案1】:

我认为我发现了错误:

Update `var user = [% for i in user_list % i % if forloop.last %%else%,%endif%% endfor %];

var user = [% for i in user_list %" i "% if forloop.last %%else%,%endif%% endfor %];`

正在给我正确的解决方案。

【讨论】:

【参考方案2】:

您可以在模板中使用

var user = user_list|safe;

使用这个模板代码,一个python列表定义为

user_list = ['te"s\'t1', 'test2'];

查看 javascript 源代码时给出以下结果

var user = ['te"s\'t1', 'test2'];

而您的原始解决方案将提供

var user = ["te"s't1","test2"];

您使用哪一个实际上取决于您打算如何处理用户名。无论您是否在模板中使用“安全”,您的模板中的 for 和 if 语句似乎都有些过度工作。

【讨论】:

以上是关于将 DJango 列表的数据传递到 javascript 列表时出错的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

如何将不同的数据从视图传递到模板?

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

Django:如何通过 AJAX 将 PKID 列表传递给下一个视图,然后重定向