【问题标题】:How to pass an array in Django to a template and use it with JavaScript如何将 Django 中的数组传递给模板并将其与 JavaScript 一起使用
【发布时间】:2010-10-18 21:41:52
【问题描述】:

我想将一个数组传递给一个模板,然后通过 JavaScript 使用它。

在我的 views.py 我有:

arry1 = ['Str',500,20]
return render_to_response('test.html', {'array1': arry1})

在我的模板中:

var array1 = {{ array1 }};

但是当我访问该网站时,它会输出:

var array1 = ['Str',500,20];

我需要改变什么?

【问题讨论】:

  • 请说得更具体一些。这“显然”如何破坏您的代码? JavaScript 看起来对我有效。
  • 当我第一次发布问题时,stackoverflow重新格式化了 9;没有空格到 ' 。我认为它必须是 ' 才能在 JavaScript 中按预期工作(或者至少我认为它可以那样工作。但不知何故出现 & # 3 9 ; (再次没有空格)

标签: javascript django django-templates


【解决方案1】:

尝试使用{{ array1|safe }} 看看是否有什么不同。

【讨论】:

  • 对我(和其他人?)从 App Engine Django 0.96 版迁移到 1.2 版特别有帮助:在 1.2 版中,您必须使用安全过滤器,而 0.96 过去只能工作...
  • 如果array1 中的元素之一是日期时间对象会发生什么。 JavaScript 无法识别日期时间。例如如果array1 = ['str', 500, 20, datetime.datetime(2017, 8, 23, 0, 0)]
  • 哇...这个答案救了我的命哈哈哈。更多 tat 3hours 试图通过使其工作。谢谢。
【解决方案2】:

如前所述,您可以使用 |safe 过滤器,这样 Django 就不会清理数组并保持原样。

另一种选择,从长远来看可能更好的是使用simplejson 模块(它包含在 django 中)将您的 Python 列表格式化为 JSON 对象,您可以在其中返回 Javascript。您可以像循环任何数组一样遍历 JSON 对象。

from django.utils import simplejson
list = [1,2,3,'String1']
json_list = simplejson.dumps(list)
render_to_response(template_name, {'json_list': json_list})

在您的 Javascript 中,只需 {{ json_list }}

【讨论】:

  • json_list 变为 [1, 2, 3, & quot;String1& quot ;] (我在 &,q,u,o,t 之后添加了空格以防止 stackoverflow 重新格式化输出)似乎不起作用。
  • 也许最好的方法是使用 simplejson.dumps 然后使用 |safe 过滤器?
  • 你是对的,在这种情况下你仍然需要使用 |safe。通常,当我用 Django 做 JSON 时,我会使用 AJAX 方法(比如来自 jQuery 的 $.getJSON)来获取它,所以我从不使用 |safe。
  • simplejson.dumps 自 django 1.5 以来已删除使用 json.dumps stackoverflow.com/questions/28048943/…
【解决方案3】:

在 Django 中:

from django.utils import simplejson
json_list = simplejson.dumps(YOUR_LIST)

并在上下文中传递“json_list”

在 JS 中:

var YOUR_JS_LIST = {{YOUR_LIST|safe}}; 

【讨论】:

  • 似乎 simplejson 在 Django 1.5 之后不再可用。改用 Python 的 json (import json)
【解决方案4】:

只需尝试将 var array1 = {{ array1 }}; 替换为 var array1 = '{{ array1|safe }}'; 即可。我不知道为什么,但这对我有用。

【讨论】:

    【解决方案5】:

    不确定何时添加到 Django,相同结果的候选是 json-script

    {{ value|json_script:"hello-data" }}

    如果 value 是字典 {'hello': 'world'},输出将是:

    <script id="hello-data" type="application/json">{"hello": "world"}</script>

    可以像这样在 JavaScript 中访问结果数据:

    const value = JSON.parse(document.getElementById('hello-data').textContent);

    在 4.0 之后的 Django 版本中,上述情况中的“hello-data”将是可选的。

    【讨论】:

      【解决方案6】:

      这可以通过 django 核心序列化器来完成。您需要做的就是在 json 中序列化您的数据,然后将其传递给模板。

      data = serializers.serialize("json", <list>)
      return render(request, 'view.html', {'data':data})
      

      在您的模板中将此列表保存到 javascript 变量中。

      var list = {{data|safe}}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-20
        • 2011-10-11
        • 1970-01-01
        • 1970-01-01
        • 2018-12-03
        • 1970-01-01
        相关资源
        最近更新 更多