将 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_a
和user_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 列表时出错的主要内容,如果未能解决你的问题,请参考以下文章
通过jQuery ajax调用将值列表传递给django视图