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

如何在JavaScript中使用Jinja2?使用时遇报错求助

在JavaScript中使用Jinja报错的解决方案

核心问题

你遇到的是浏览器将Jinja模板语法当作原生JavaScript代码解析,触发语法错误(比如报错提示的Uncaught SyntaxError: Unexpected token '{')。

Jinja是服务端模板引擎,它的语法({{ 变量 }}、{% 控制语句 %})必须在服务端渲染页面时完成解析替换,再把最终的HTML/JS代码发送给浏览器。直接在前端JS里写Jinja语法,浏览器无法识别这些符号,必然报错。

针对性解决方法

结合你的Python后端代码(推测是Flask框架场景),提供三种可行方案:

1. 服务端注入变量到JS

在HTML模板中,用Jinja把后端变量渲染成合法的JS格式,再在JS中使用:

<script>
  // 用tojson过滤器把Python对象转成合法JSON
  const backendData = {{ your_flask_variable | tojson }};
  // 正常使用变量
  console.log(backendData);
</script>

tojson过滤器会自动处理引号、特殊字符,避免JS语法错误。

2. AJAX请求后端接口拿数据

如果数据需要动态获取或体量较大,不要直接在JS里嵌Jinja,而是通过接口拉取:

// 前端JS
fetch('/api/get-data')
  .then(res => res.json())
  .then(data => {
    // 处理拿到的数据
    console.log(data);
  });

对应的Flask后端接口:

@app.route('/api/get-data')
def get_data():
    data = {"name": "test", "items": [1,2,3]}
    return jsonify(data)

3. 服务端渲染JS控制逻辑

如果要在JS里用Jinja的循环、判断,必须在服务端完成渲染:

<script>
  {% for item in data_list %}
    // 用escapejs转义特殊字符,避免破坏JS结构
    console.log("{{ item | escapejs }}");
  {% endfor %}
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:10:40