You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask框架下Jinja2如何正确输出JavaScript字符串变量值

问题原因

Jinja2渲染字符串变量时默认不会自动添加JavaScript语法要求的引号,也不会自动处理特殊字符。你当前的写法test({{s}})渲染后得到的test(Hello! Jinja~)没有对字符串做引号包裹,JavaScript会把Hello! Jinja~识别为未定义的变量,因此抛出错误。

解决方案

方案1:使用tojson过滤器(最推荐)

Jinja2内置的tojson过滤器可以直接把Python类型转换为合法的JavaScript字面量,会自动处理引号包裹、特殊字符转义,还能避免XSS注入风险,完全适配变量来自数据库等不可信来源的场景。
修改后的代码如下:

<a href='#' onclick='test({{ s|tojson }})'>click me</a>

渲染后的代码会自动变为符合JS语法的格式:

<a href="#" onclick="test(&quot;Hello! Jinja~&quot;)">click me</a>

浏览器会自动解析实体编码的引号为普通双引号,点击后就能正常弹出预期内容。

方案2:手动加引号配合转义(不推荐)

如果需要手动控制格式,也可以给变量套上引号,同时用escape过滤器处理特殊字符:

<a href='#' onclick='test("{{ s|escape }}")'>click me</a>

该方案存在缺陷:如果变量内容本身包含双引号,会打断字符串结构导致新的语法错误,因此仅适合确定变量不含引号的场景使用。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:39:03