当前位置: 首页 > 知识库问答 >
问题:

将JSON从Flask模板传递到HTML再到静态JS脚本时出现问题

江阳冰
2023-03-14

我有一个JSON数据数组,我想从Flask模板传递到HTML到静态JS脚本,以实现d3.js可视化。根据这篇文章,我将其设置为以下内容:

烧瓶(routes.py):

@app.route('/demo_statements')
def demo_statements():
    return render_template('tp_demo_statements.html', title='Statements Demo', data= 
  [{
    "tp_utt_a": "77",
    "tp_utt_c": "28",
    "tp_utt": "105",
    "tp_uttlen_a": "3.6",
    "tp_uttlen_c": "1.6",
    "tp_utt_metric": "2.0",
    "tp_utt_a_s": "78",
    "tp_utt_c_s": "25",
    "tp_utt_s": "103",
    "tp_uttlen_a_s": "3.7",
    "tp_uttlen_c_s": "1.9",
    "tp_utt_metric_s": "2.0",
  }]
)

在HTML (tp_demo_statements.html)中:

<div class="col-12" id="statements" data_dict='{{ data | tojson }}'>

和脚本:

<script type="text/javascript" src="{{ url_for('static', filename='js/statements.js') }}"></script>

在JS(statements.js)中:

var data_dict = JSON.parse(document.getElementById("statements").dataset.data_dict);

但是,这将返回未捕获的SyntaxError:控制台中JSON中位置0处的意外标记u。

我的直觉是,问题发生在HTML和JS之间(即数据没有正确地传递到JS中)。当数据直接输入到JavaScript文件中时,可视化将按预期加载,因此在下游绝对不会出现问题。我尝试了其他置换来定义数据,例如:

var data_dict = document.getElementById("statements").dataset.data_dict;
var data_dict = JSON.parse($("#statements").data("data_dict"));
var data_dict = $("#statements").data("data_dict");

这些都不管用!我做错了什么?任何帮助都将不胜感激!

共有1个答案

欧阳飞
2023-03-14

也许这些变化可以帮助你。

@app.route('/demo_statements')
def demo_statements():
  data = [{
    "tp_utt_a": "77",
    "tp_utt_c": "28",
    "tp_utt": "105",
    "tp_uttlen_a": "3.6",
    "tp_uttlen_c": "1.6",
    "tp_utt_metric": "2.0",
    "tp_utt_a_s": "78",
    "tp_utt_c_s": "25",
    "tp_utt_s": "103",
    "tp_uttlen_a_s": "3.7",
    "tp_uttlen_c_s": "1.9",
    "tp_utt_metric_s": "2.0",
  }]
  graph_data = json.dumps(data, indent=2)
  data = {'graph_data': data}
  return render_template('tp_demo_statements.html', title='Statements Demo', data=data)

在您的Html中:

<div class="col-12" id="statements" data_dict='{{ data.graph_data | save}}'>
 类似资料:
  • 问题内容: 我正在为Flask和SQLAlchemy构建管理员,并且我想使用来将用于不同输入的HTML传递给我的视图。模板框架似乎会自动转义html,因此所有<“’>都将转换为html实体。如何禁用它以使HTML正确呈现? 问题答案: 理想的方法是 而不是完全关闭自动转义。

  • 问题内容: 我正在为构建管理员,并且我想使用来将用于不同输入的HTML传递给我的视图。模板框架似乎会自动转义,因此所有都将转换为html实体。如何禁用它以使HTML正确呈现? 问题答案: 理想的方法是 而不是完全关闭自动转义。

  • 问题内容: 背景: 我创建了一个非常简单的前端,用户可以在其中输入字符串。输入并单击“检查”按钮后,我想将此字符串作为JSON传递给python字符串,它将在其中进行SQL查找。根据SQL外观,python脚本应传递一个布尔值,该值应更改?到✔或✘。 题: 一旦按下“检查”按钮作为JSON到Python脚本,然后如何将字符串从Python传递到HTML,将?更改为✔或✘,如何传递字符串? 研究:

  • 我在windows服务器上正常工作了这个项目,但是当将它复制到Ubuntu服务器时,当我试图通过浏览器访问它时,它给出了这个错误

  • 问题内容: 我的应用程序调用了一个返回字典的API。我想将信息从此字典传递给视图中的JavaScript。具体来说,我在JS中使用Google Maps API,因此我希望向其传递包含长/短信息的元组列表。我知道会将这些变量传递给视图,以便可以在HTML中使用它们,但是如何将它们传递给模板中的JavaScript? 问题答案: 将几乎所有Python对象都转换为JavaScript对象的理想方法是

  • 我的应用程序调用一个返回字典的API。我想将这个dict中的信息传递给视图中的JavaScript。我在JS中特别使用了Google Maps API,所以我想传递给它一个包含long/lat信息的元组列表。我知道会将这些变量传递给视图,以便它们可以在HTML中使用,但是我如何才能在模板中将它们传递给JavaScript呢?