Flask模板使用extends引入不同文件夹模板的路径设置问题
Flask跨文件夹引入模板的正确配置方法
基础查找规则
Flask的Jinja2模板引擎默认会从模板根目录下查找所有模板文件,默认模板根目录是项目根目录下的templates文件夹,你在{% extends %}中写的所有路径都是相对于模板根目录的相对路径。
问题排查步骤
- 首先确认目录结构是否符合要求,标准结构示例如下:
项目根目录/ ├── app.py(Flask启动文件) └── templates/ # 模板根目录 ├── NavigationEG/ # 公共模板文件夹 │ └── layout.html └── 你的业务模板文件夹/ └── 调用layout的业务模板.html
- 确认你没有自定义模板根目录,如果你修改过默认配置,需要确保
NavigationEG文件夹存放在你指定的模板根目录下,自定义模板根目录的写法如下:
# 实例化Flask时指定template_folder参数 app = Flask(__name__, template_folder='你自定义的模板根目录路径')
- 如果你使用了蓝图(Blueprint)且蓝图单独配置了
template_folder参数,查找路径会优先匹配蓝图的模板目录,这时候需要在路径前加/声明从全局模板根目录查找:
{% extends '/NavigationEG/layout.html' %}
常见报错原因
注意不要把模板根目录本身写入路径,比如
{% extends 'templates/NavigationEG/layout.html' %}是错误写法,Flask已经默认从模板根目录开始查找,不需要额外加templates前缀
Linux、macOS系统的文件路径大小写敏感,需要确保你写的NavigationEG和实际文件夹名的大小写完全一致,拼写错误也会导致加载失败
验证方法
你可以添加如下代码打印当前Flask的模板查找路径,确认NavigationEG的父目录在搜索路径列表中:
# 放在Flask实例化代码之后即可 print(app.jinja_loader.searchpath)
内容的提问来源于stack exchange,提问作者Sagar Gaikwad
相关产品推荐
相关产品推荐

