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

时间:2012-07-07 19:46:46

标签: javascript python django django-templates python-2.7

我有一个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列表传递给Js-list:

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

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

Uncaught ReferenceError : user_a is not defined

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

var user = [user_a,user_b]

我无法理解为什么会这样:(

2 个答案:

答案 0 :(得分: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 %}];`

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

答案 1 :(得分:0)

在模板中,您可以使用

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语句似乎都有点过度。