Flask 蓝图多目录下 Templates 加载问题

本文介绍了一个关于Flask框架中使用蓝图(Blueprint)时遇到的模板加载冲突问题,并提供了两种解决方案:一是通过调整蓝图的嵌套目录结构;二是合并模板文件夹。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

项目目录下如下:

MyApplication
	__init__.py
    run.py
    app/
        admin/
            __init__.py
            view.py
            templates/
                index.html
        user/
            __init__.py
            view.py
            templates/
                index.html

admin/view.py 的内容如下:

from flask import render_template

admin = Blueprint('admin', __name__, template_folder='templates')

@admin.route('/')
def index():
    return render_template('index.html')

user/view.py 的内容如下:

from flask import render_template

user = Blueprint('user', __name__, template_folder='templates')

@user.route('/')
def index():
    return render_template('index.html')

此时,如果访问 http://127.0.0.1:5000/admin,将正常访问 admin\templates\index.html。如果访问 http://127.0.0.1:5000/user,仍显示 admin\templates\index.html

原因

  • app 创建时会从 Flask注册函数中读取 templates_folder,如果没有设置,默认是 app/templates 作为全局 jinja_loader
  • render_template 函数会首先访问 app 的全局 jinja_loader ,从中读取模板路径
  • 访问不到就会循环访问所有注册蓝图的 jinja_loader。多个蓝图提供相同的相对路径时,第一个注册的优先

解决思路

  1. 嵌套目录

    在这里插入图片描述

  2. 合并目录

    在这里插入图片描述
    3. 参考

补充

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值