通过Jinja2 render_template()将python字符串列表导入javascript变量
我想通过调用(Jinja2)通过Jinja2 render_template()将python字符串列表导入javascript变量,python,flask,jinja2,Python,Flask,Jinja2,我想通过调用(Jinja2)render\u template('manage\u stations.HTML',stations=stations) (javascript变量应该是一个站名数组,作为用于自动完成功能的字符串): 在我的python代码中,列表站[]的条目类型为sqlite3.Row。我只需要['station_name']内容: stations[0]['station_name'] = 'station1name' stations[1]['station_name'] =
render\u template('manage\u stations.HTML',stations=stations)
(javascript变量应该是一个站名数组,作为用于自动完成功能的字符串):
在我的python代码中,列表站[]的条目类型为sqlite3.Row。我只需要['station_name']内容:
stations[0]['station_name'] = 'station1name'
stations[1]['station_name'] = 'station2name'
stations[2]['station_name'] = 'station3name'
等等
我的manage_stations.html文件如下:
<!DOCTYPE html>
<html lang="de">
<head>
<script>
var station_names = {{ [ x['station_name'] for x in stations]|tojson }} ;
</script>
</head>
<body></body>
</html>
然后将其作为附加参数传递给render_template函数。
render\u模板('manage\u stations.html',stations=stations,station\u name\u string=l)
但是只传递一个变量站(包含所有必要信息)并以某种方式进行格式化不是更好吗
谢谢大家!
编辑:
我刚刚发现Jinja2中不支持列表理解-是否仍有可能在不添加第二个参数的情况下获取变量集?…解决此问题的一个(不是理想的)方法是真正添加一个新参数stations\u list,并添加以下内容:
station_list = [ x['station_name'] for x in stations]
<script>
var station_names = {{ station_list|safe }} ;
</script>
station\u list=[x['station\u name']表示站点中的x]
var station_names={{station_list}安全};
但是,我仍然没有被标准化,因为我传递了两个具有相同信息的参数,只是因为无法进行格式化
l = "'" + "','".join(s['station_name'].replace("'", r"\'") for s in stations) + "'"
station_list = [ x['station_name'] for x in stations]
<script>
var station_names = {{ station_list|safe }} ;
</script>