文件目录自动包括“routes\xxx...\“?

15 篇文章 1 订阅

一、问题如下

在学习运用Flask框架时,遇到了一个问题:

source_file_path = os.path.join(zj_el_bp.root_path, 'static', 'SourceFile', 'ZhejiangProvince', '证据清单.docx')
print('source_file_path :',source_file_path )

输出为D:\Programming\WenshuWebsite\Web\routes\ZhejiangProvince\static\SourceFile\ZhejiangProvince\证据清单.docx
而不是
D:\Programming\WenshuWebsite\Web\static\SourceFile\ZhejiangProvince\证据清单.docx

二、查证结果如下

因为使用了 Flask 的 Blueprint,而 Blueprint 的 root_path 是基于该蓝图所在模块的目录结构自动推断出来的。 

当创建一个 Flask Blueprint 时,root_path 自动指向定义该蓝图的 Python 文件所在的目录。例如:

zj_el_bp = Blueprint('zj_el', __name__)

在这个例子中,__name__ 是当前模块的名称。如果 Blueprint 定义在 routes/ZhejiangProvince/ 目录下,那么 root_path 就会自动被设置为:

D:\Programming\WenshuWebsite\Web\routes\ZhejiangProvince\

因此,source_file_path 会被拼接成:

D:\Programming\WenshuWebsite\Web\routes\ZhejiangProvince\static\SourceFile\ZhejiangProvince\证据清单.docx

三、解决方法如下

1. 使用相对路径(基于项目根目录)
手动调整路径,使其相对于项目根目录:

project_root = os.path.abspath(os.path.join(zj_el_bp.root_path, '../../..'))
source_file_path = os.path.join(project_root, 'static', 'SourceFile', 'ZhejiangProvince', '证据清单.docx')

通过这种方式,project_root 指向的是项目根目录 D:\Programming\WenshuWebsite\Web\,然后再在此基础上拼接剩余路径。

2. 在配置中设置路径
另一种常见的做法是将项目根路径设置在 Flask 配置中,并在代码中使用配置值:

app.config['PROJECT_ROOT'] = os.path.abspath(os.path.dirname(__file__))

然后在蓝图中这样使用:

source_file_path = os.path.join(app.config['PROJECT_ROOT'], 'static', 'SourceFile', 'ZhejiangProvince', '证据清单.docx')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脑子不好真君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值