一尘不染

以数组形式访问javascript中的python列表

flask

我的flask views.py中有这个

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

我的样本.html中有这个

    <script> var counts = {{test}}; </script>

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


阅读 547

收藏
2020-04-06

共1个答案

一尘不染

  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, <built-in function any>],但这仅是示例,永远不会起作用。

  2. 要在flask中隐式转换为javascript对象,请使用以下tojson过滤器:

<script> var counts = {{ test|tojson }}; </script>

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

  1. 你还可以将javascript代码发送到模板:
from flask import json
return render_template("sample.html",test=json.dumps(test))

但这不是一个好方法,最好使用tojson同时也是HTML标记安全的过滤器。

  1. 我宁愿不要在模板中混用任何JavaScript代码,也不要将模板,JavaScript和JavaScript数据与Ajax混合使用。如果这种方法很难,我宁愿使用tojson过滤器。
2020-04-06