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

Jinja+Django外部JS模板语法报错:Uncaught SyntaxError

解决外部JS文件中模板语法导致的语法错误问题

问题核心原因:你的模板引擎(比如Django,从{% static %}标签可判断)只会解析HTML文件内的模板标签/变量,外部JS文件是直接被浏览器请求加载的,不会经过模板引擎处理。因此{{ dish.recipe_as_list | safe }}会被JS当成原始语法,{{属于非法字符,直接触发语法错误。

下面是两种实用的解决方法:

方案一:通过全局变量传递数据

在HTML中,外部JS引用之前,用<script>标签定义全局变量,把模板数据注入进去:

<div class="recipe">
    ...
    <script>
        // 将模板数据挂载到window全局对象
        window.recipeData = {{ dish.recipe_as_list | safe }};
    </script>
    <script src="{% static 'dishes/js/dish-details.js' %}"></script>
</div>

修改外部JS代码,直接引用这个全局变量:

constructor() {
    this.data = window.recipeData;
    ...
}

方案二:通过HTML data属性传递数据

把数据嵌入到HTML元素的data-*属性中,再在外部JS里读取解析:

  1. 修改HTML,给容器元素添加data属性:
<div class="recipe" data-recipe="{{ dish.recipe_as_list | safe }}">
    ...
    <script src="{% static 'dishes/js/dish-details.js' %}"></script>
</div>
  1. 在外部JS中读取并解析数据:
constructor() {
    // 获取目标容器元素
    const recipeContainer = document.querySelector('.recipe');
    // 读取data属性并解析为JS对象(需确保数据是合法JSON格式)
    this.data = JSON.parse(recipeContainer.dataset.recipe);
    ...
}

注意事项

  • 确保dish.recipe_as_list输出的是合法的JSON格式,否则JSON.parse会抛出解析错误。
  • 如果数据包含用户输入内容,要做好XSS防护,避免恶意脚本注入风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:12:42