【问题标题】:Pass python list to JavaScript in a jinja template在 jinja 模板中将 python 列表传递给 JavaScript
【发布时间】:2019-11-16 07:16:47
【问题描述】:

我正在使用烧瓶构建一个 CRUD 应用程序。我完成了创建、读取和删除。留下更新部分。要更新的记录将以 html 形式显示,以便编辑显示的数据库记录。

我的问题是当数据库记录显示在表单中时,我希望根据数据库记录中的值选中一个复选框或选择一个下拉列表项。

有没有办法将数据库查询的结果(1 条记录)作为 JavaScript 数组传递给 JavaScript,获取 JavaScript 数组中的项目,并在 JavaScript 语句中使用它们来控制复选框?

@app.route('/update/<int:id>/')
def update(id):

    cur=mysql.connection.cursor()
    cur.execute("SELECT * FROM profiles where entity_id = %s", (id,))
    row=list(cur.fetchall())
    cur.close()
    return render_template('profile-update.html', data = row)

下面是模板

<!DOCTYPE html> 
<html>
<head>

</head>
<body class="hold-transition skin-blue layout-top-nav">

  <div class="form-check form-check-inline">
    <input class="form-check-input" type="radio" name="inlineRadioOptions"             
     id="inlineRadio1" value="option1">
    <label class="form-check-label" for="inlineRadio1">company</label>
  </div>
  <div class="form-check form-check-inline">
    <input class="form-check-input" type="radio" name="inlineRadioOptions"
     id="inlineRadio2" value="option2">
    <label class="form-check-label" for="inlineRadio2">partnership</label>
  </div>
  <div class="form-check form-check-inline">
    <input class="form-check-input" type="radio" name="inlineRadioOptions" 
     id="inlineRadio3" value="option3"`enter code here`>
  </div>
</body>
</html>

我对此进行了广泛的研究,但建议的解决方案似乎不起作用

【问题讨论】:

  • 模板在哪里?您尝试在模板中做什么?您是否尝试使用 update() 中的 JavaScript 数组将其转换为字符串并将其作为可以放入 JavaScript 代码的字符串发送?
  • 我已经添加了模板
  • 为什么需要一个JS数组来控制复选框?我不关注这个问题。如果你传递了一个字典,那么你可以决定在渲染时是否应该检查一个框,而不是通过额外的脚本
  • @roganjosh 请演示如何做到这一点

标签: javascript python flask jinja2


【解决方案1】:

您使用通过jinja markup 传递到模板中的数据。

/templates/demo_template.html

*{{data}}*

/main.py

import flask

app = flask.Flask(__name__)

@app.route('/demo')
def demo():
    data = [dict(greeting='hello!'),dict(greeting='world!')]
    return flask.render_template('demo_template.html', data=data)

if __name__ == "__main__":
    app.run()

the output in browser

【讨论】:

  • 您可能需要使用 ...|safe 过滤器来告诉 jinja 它不应该转义特殊字符。当然,您应该在 Python 层确保内容实际上是是安全的(即首先清理任何用户生成的值)。
  • 在重新阅读问题后,这个答案并没有解决问题的重点:如何将复选框项目或下拉项目标记为“已选中”
猜你喜欢
  • 2019-01-19
  • 1970-01-01
  • 2012-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-23
  • 1970-01-01
相关资源
最近更新 更多