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

Flask蓝图与Jinja模板继承问题:子模板无法继承外部父模板

解决Flask蓝图子模板继承外部模板的问题

问题根源

Flask默认的模板搜索路径是项目根目录下的templates文件夹,以及各蓝图自身的templates目录。你把父模板base.html放在static/templates里,这个路径不在默认搜索范围内,所以Jinja找不到它。另外,static目录原本是用来存放CSS、JS、图片等静态资源的,把模板放在这里不符合Flask的规范。

方案一:调整目录结构(推荐)

把base.html从static/templates移到项目根目录的templates文件夹下,调整后的项目结构如下:

flask/
  app.py
  templates/
     base.html
  static/
     # 存放css、js、图片等静态资源
  blueprints/
    albums/
       __init__.py
       templates/
          albums.html
       routes.py

之后在albums.html里直接写:

{% extends 'base.html' %}

Flask会自动从根目录的templates里找到base.html,无需额外配置。

方案二:手动添加模板搜索路径(不推荐,仅用于无法调整目录的情况)

如果一定要保留static/templates的结构,在app.py初始化Flask应用时,把这个路径添加到Jinja的模板搜索列表里:

import os
from flask import Flask

app = Flask(__name__)

# 获取static/templates的绝对路径
extra_template_path = os.path.join(app.root_path, 'static', 'templates')
# 添加到Jinja的搜索路径
app.jinja_loader.searchpath.append(extra_template_path)

完成后,albums.html里依然可以用{% extends 'base.html' %}来继承父模板。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:10:55