【问题标题】:How to: django template pass array and use it in javascript?如何:django 模板传递数组并在 javascript 中使用它?
【发布时间】:2011-10-11 23:48:20
【问题描述】:

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

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

<..>

{{ visitedCountriesList }}

我从服务器传递了一个列表给这个项目,但渲染后它看起来像这样:

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

    <..>

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

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

【问题讨论】:

    标签: python django google-app-engine templates


    【解决方案1】:

    问题是数组的字符串表示不是有效的 JavaScript。一开始的u' 不好。这个:

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

    应该是这样的:

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

    你有两个选择。在视图函数中,在那里将其编码为 JSON:

    render_to_response('my_view.html', {
        'visitedCountriesList' : json.dumps(visitedCountriesList)
    })
    

    或创建一个您可以使用的过滤器。请参阅this 一个示例。那么用法就是:

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

    【讨论】:

      【解决方案2】:

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

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

      在你的 javascript 中:

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

      假设您使用的是 jQuery。

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

      希望这会有所帮助!

      【讨论】:

      • 好的,请问如何在js中将data="[u'Afghanistan', u'Japan', u'United Arab Emirates']" 转换为数组对象?
      • 您应该将列表编码为 json 并在您的 javascript 中对其进行解码。 from django.utils import simplejson vcountries = simplejson.dumps(vcountries) 并从您的视图中发送它并在您的 javascript 上使用 JSON.parse 解码变量
      • 没有必要这样做 - json编码后,它可以简单地作为字符串插入到Javascript中。
      猜你喜欢
      • 2020-05-26
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 2020-09-10
      • 2011-10-30
      • 2018-12-20
      相关资源
      最近更新 更多