You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过Jinja2将Python站点列表转为JS变量(无需额外参数)

解决Jinja2模板中生成自动补全JS数组的问题

嘿,我懂你的困扰——Jinja2确实不支持Python原生的列表推导式语法,不过咱们完全可以不用在后端额外拼接数组,直接靠模板内置的过滤器就能搞定这个需求!

正确的模板写法

你可以用Jinja2的map过滤器来提取每个sqlite3.Row对象里的station_name字段,再结合listtojson过滤器生成合法的JavaScript数组:

<script>
var station_names = {{ stations|map(attribute='station_name')|list|tojson }};
</script>

为什么这个写法可行?

  • map(attribute='station_name'):遍历传入的stations列表,逐个提取每个sqlite3.Row对象的station_name属性(因为sqlite3.Row支持类似字典的键访问,所以这个写法完全有效)。
  • |list:把map返回的迭代器转换成Jinja2能处理的列表对象。
  • |tojson:把这个列表转换成符合JSON规范的字符串,直接嵌入到JavaScript代码里就成了合法的数组变量。

举个实际的例子,如果你的stations列表包含三个站点,生成的JS代码会是这样的:

var station_names = ["中央车站", "东城区站", "西郊区站"];

这样就完美实现了你想要的效果,不用在Python后端额外处理数组,纯模板层面就能搞定啦!

内容的提问来源于stack exchange,提问作者Mathias

火山引擎 最新活动