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

时间:2011-07-24 10:56:05

标签: python django google-app-engine templates

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

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

<..>

{{ visitedCountriesList }}
从服务器

我将一个列表传递给这个项目,但在渲染后它看起来像这样:

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

    <..>

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

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

2 个答案:

答案 0 :(得分:8)

问题是数组的字符串表示形式不是有效的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)
})

或创建可以使用的过滤器。有关示例,请参阅this一个。然后使用只是:

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

答案 1 :(得分:1)

你应该在你的html中有一个带有变量渲染的id并在那里查看,让我们做一个例子:

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

并在您的javascript中:

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

假设您正在使用jQuery。

我真的不知道为什么该模板会分配变量,但你不应该渲染任何关于javascript代码的信息,因为有一段时间你要把它拿到js并把它放在压缩文件上,或者移动它,或者重用如果以这种方式渲染变量值,那将很难做到。

希望这有帮助!