Flask使用Jinja引入static目录HTML文件遇TemplateNotFound错误求解决
解决Jinja2 TemplateNotFound: /static/myfile.html错误
看起来你遇到了Flask中Jinja模板包含的路径问题,我来帮你梳理下原因和解决办法:
错误原因
Flask默认配置下,Jinja2的模板搜索目录只有项目根目录下的templates文件夹,而static目录是用来存放静态资源(比如CSS、JS、图片)的,Jinja不会自动去这里查找模板文件,所以当你写{% include '/static/myfile.html' %}时,Jinja找不到这个文件就会抛出TemplateNotFound错误。
解决方案
方案1:遵循Flask目录规范(推荐)
把你的myfile.html从static目录移动到templates目录下(如果没有templates文件夹就新建一个,和你的Flask主脚本同级),然后修改sample1.html中的include语句:
{% include 'myfile.html' %}
如果你的模板有分类需求,可以在templates里建子文件夹(比如templates/includes),把myfile.html放进去,然后写成:
{% include 'includes/myfile.html' %}
方案2:将static目录添加到Jinja搜索路径(不推荐,仅特殊场景使用)
如果你因为某些原因必须把模板放在static目录下,可以在Flask初始化时,把static目录添加到Jinja的搜索路径中:
from flask import Flask app = Flask(__name__) # 把static目录加入Jinja模板搜索路径 app.jinja_loader.searchpath.append(app.static_folder) @app.route('/sample') def sample(): return render_template('sample1.html')
然后修改sample1.html中的include语句,去掉前面的/static/:
{% include 'myfile.html' %}
⚠️ 注意:这种做法不推荐,因为static目录的设计初衷是存放无需模板渲染的静态资源,把模板放这里会混淆目录职责,不利于项目长期维护。
额外检查点
- 确认
myfile.html的文件名拼写正确,注意大小写(Linux/macOS系统对文件名大小写敏感) - 确认文件确实存在于你指定的目录中,没有放错位置
内容的提问来源于stack exchange,提问作者KrisHnA
相关产品推荐
相关产品推荐

