Flask项目引入静态JS文件返回404错误,其他解决方案无效如何处理
问题原因
- 核心原因:视图函数直接返回硬编码的HTML字符串,没有经过Flask的Jinja2模板引擎渲染,
{{url_for()}}属于模板语法,不会被解析替换成实际的静态资源路径,浏览器会直接把{{...}}作为普通字符串拼接进请求URL,日志里的%7B%7B就是{{的URL编码,这是404的主要诱因。 - 路径参数错误:就算启用模板渲染,你代码里
filename参数开头多写了斜杠,应该传入相对static目录的路径,不需要加前导斜杠。 - 潜在笔误:日志中请求的jquery路径为
/js/bin/jquery-3.4.1.slim.min.js,但你的目录结构里js下是lib文件夹,需要核对代码里是否把lib误写为bin,或者文件放错了目录。
修复方案
方案1:使用标准模板渲染(推荐)
- 在art目录下新建名为
templates的文件夹,把你写的HTML代码完整保存到templates/index.html文件中 - 修正HTML里script标签的路径,去掉filename的前导斜杠:
<script src="{{url_for('static', filename='js/lib/jquery-3.4.1.slim.min.js')}}"> </script> <script src="{{url_for('static', filename='js/Main.js')}}"> </script>
- 修改视图函数,调用
render_template渲染模板而非直接返回字符串:
from flask import Flask, render_template app = Flask(__name__) @app.route("/art") def index(): return render_template("index.html") if __name__ == "__main__": app.run(host="127.0.0.1", port=8080, debug=True)
方案2:硬写静态资源路径(无需模板)
如果不想引入模板体系,直接把script标签里的{{url_for()}}替换为实际的静态资源路径即可:
<script src="/static/js/lib/jquery-3.4.1.slim.min.js"> </script> <script src="/static/js/Main.js"> </script>
验证步骤
修复后重启Flask服务,确认静态文件目录结构正确:
- art/static/js/lib/jquery-3.4.1.slim.min.js 存在
- art/static/js/Main.js 存在
内容的提问来源于stack exchange,提问作者user8245469
相关产品推荐
相关产品推荐

