Python 如何:django模板传递数组并在javascript中使用它?

Python 如何:django模板传递数组并在javascript中使用它?,python,django,google-app-engine,templates,Python,Django,Google App Engine,Templates,好的,这里有个问题, 我有一个html模板,看起来像这样: <script> $(function() { var vCountries = {{ visitedCountriesList }}; }); </script> <..> {{ visitedCountriesList }} <script> $(function() { var vCountries = ;

好的,这里有个问题, 我有一个html模板,看起来像这样:

<script>
    $(function() {
        var vCountries = {{ visitedCountriesList }};
    });
</script>

<..>

{{ visitedCountriesList }}
<script>
    $(function() {
            var vCountries = ;
        });
    </script>

    <..>

    [u'Afghanistan', u'Japan', u'United Arab Emirates']

$(函数(){
var vCountries={{visitedCountriesList};
});
{{visitedCountriesList}
我从服务器向该项传递了一个列表,但在呈现之后,它看起来如下所示:

<script>
    $(function() {
        var vCountries = {{ visitedCountriesList }};
    });
</script>

<..>

{{ visitedCountriesList }}
<script>
    $(function() {
            var vCountries = ;
        });
    </script>

    <..>

    [u'Afghanistan', u'Japan', u'United Arab Emirates']

$(函数(){
var vCountries=;
});
[阿富汗、日本、阿拉伯联合酋长国]

所以我的问题是——为什么?以及如何将其传递给javascript…?

您的html中应该有一个id,带有呈现的变量,并在那里查看,让我们做一个示例:

<...>
    <loldiv id="myvar" data="{{info}}"/>
<...>

在javascript中:

<script>
$(function() {
    var vCountries = $("#myvar").attr("data");
});
</script>

$(函数(){
var vCountries=$(“#myvar”).attr(“数据”);
});
这是假设您正在使用jQuery

我真的不知道为什么模板会分配变量,但是你不应该在javascript代码中呈现任何信息,因为有一段时间你会把js放到一个压缩文件中,或者移动它,或者重用它,如果你以这种方式呈现变量值的话,这将非常困难


希望这有帮助

问题是数组的字符串表示形式不是有效的JavaScript。开头的
u'
不好。这:

[u'Afghanistan', u'Japan', u'United Arab Emirates']
应该是这样的:

['Afghanistan', 'Japan', 'United Arab Emirates']
你有两个选择。在view函数中,将其编码为JSON:

render_to_response('my_view.html', {
    'visitedCountriesList' : json.dumps(visitedCountriesList)
})
或者创建一个可以使用的过滤器。请参见一个示例。那么用法就是:

<script>
  $(function() {
    var vCountries = {{ visitedCountriesList|jsonify }};
  });
</script>

$(函数(){
var vCountries={{visitedCountriesList}jsonify};
});

ok,那么如何将data=“[u'Afghanistan',u'Japan',u'Arab Emirates]”转换为js中的数组对象?您应该将列表编码为json并在javascript中解码。从django.utils导入simplejson vcountries=simplejson.dumps(vcountries)并从您的视图发送,然后在您的Javascript上使用JSON.parse对变量进行解码,无需执行此操作-在JSON编码后,它可以简单地作为字符串插入Javascript中。