在javascript中访问python列表作为数组

knk*_*knk 13 javascript python flask

我在烧瓶views.py中有这个

    def showpage():
      ...
      test = [1,2,3,4,5,6]
      return render_template("sample.html",test=test)
Run Code Online (Sandbox Code Playgroud)

我的样本.html中有这个

    <script> var counts = {{test}}; </script>
Run Code Online (Sandbox Code Playgroud)

这给了我一个空的计数变量.如何获得与python中的测试列表相同的计数?

tbi*_*icr 19

  1. 将变量插入模板时{{ test }},需要使用对象表示.对于int的列表,[1,2,3,4,5,6]它将被呈现为[1, 2, 3, 4, 5, 6],因此它是有效的javascript数组,但是这种方法不是安全的复杂对象,没有类似javascript的表示,例如,test = [1,2,3,4,5,any]将呈现因为[1, 2, 3, 4, 5, &lt;built-in function any&gt;],这只是一个例子,永远不会奏效.

  2. 隐式转换为烧瓶中的javascript对象存在tojson过滤器:

    <script> var counts = {{ test|tojson }}; </script>
    
    Run Code Online (Sandbox Code Playgroud)

    因此,如果对象是JSON可序列化的,则将全部呈现,否则模板引擎将引发异常.

  3. 您还可以将javascript代码发送到您的模板:

    from flask import json
    return render_template("sample.html",test=json.dumps(test))
    
    Run Code Online (Sandbox Code Playgroud)

    但它不是一个好方法,最好使用tojson也是HTML标记安全的过滤器.

  4. 我更喜欢不在模板中混合任何javascript代码,并使用ajax分割模板,javascript和javascript数据.如果这种方法很难,我宁愿使用tojson过滤器.

  • `tojson`过滤器生成一个**HTML安全**版本的值,`json.dumps()`没有.**在生成JavaScript值时,始终**在模板中使用`| tojson`,而不是`json.dumps()`. (4认同)

sha*_*aan 7

您可以在烧瓶视图中使用json.dumps,在javascript代码中使用JSON.parse.

在python视图中:

def showpage():
    ...
    test = [1,2,3,4,5,6]
    test = json.dumps(test)
    return render_template("sample.html",test=test)
Run Code Online (Sandbox Code Playgroud)

在JavaScript代码中:

<script> var counts = JSON.parse("{{ test }}"); </script>
Run Code Online (Sandbox Code Playgroud)

  • 你根本不需要`JSON.parse()`;使用`tojson` 作为*HTML 安全的Javascript 子集*。 (2认同)

小智 7

你也可以使用

{{ test|safe }} 
Run Code Online (Sandbox Code Playgroud)

或者

{{ test|tojson|safe }}
Run Code Online (Sandbox Code Playgroud)

safe过滤器应用到script标签内使用。