前言
这篇短文写在我的腾讯一面搞砸之后,这次面试让我深刻认识到我一直是一个很功利的人。总结了一下一共有几个要点:
- 看需求办事,有什么需求谷歌什么,查看文档相关部分,而其他的部分置之不理,全然没有深入学习的决心
- 对一个框架没有深入了解,仅仅止步于工具化,也没有对框架有更深层的了解,这让我很惭愧
- 做事没有从工程层面来思考问题,仅仅从个人角度思考问题
flask包调用过程中的路径问题
假设有如下情况,my_app是封装为包的一个flask app,app声明在my_app/__init__.py文件中,h.py是包内的一个辅助模块,在run_app.py中调用my_app这个包的flask app进行运行
- my_app
- static
- templates
- __init__.py
- h.py
- run_app.py
###在辅助模块h.py中加载static中的静态文件###
当情况是运行run_app.py,而h.py需要加载static中静态文件的时候,在h.py中使用的路径可以是两种情况:
- 绝对路径
- 相对路径 ./my_app/static/file_name
注意包调用情况下,如果包内非__init__模块要加载static内静态文件,需要使用从包外路径开始定位
###html内加载静态文件###
当情况是运行run_app.py,html内需要加载静态文件,路径必须是相对路径,形式为:/static/file_name
###实例文件夹###
flask除了提供 app.static_folder和app.template_folder之外
flask还提供了instance_path
instance_path也可以用来存放静态文件,但是要注意的是instance_path所在的位置
flask文档对instance_path位置的阐述如下:
- 未安装的模块:
1 | /myapp.py |
- 未安装的包
1 | /myapp |
- 已安装的包或模块:
1 | $PREFIX/lib/python2.X/site-packages/myapp |
$PREFIX 是你 Python 安装的前缀。这个前缀可以是 /usr 或者你的 virtualenv 的路径。你可以打印 sys.prefix 的值来查看前缀被设置成了什么
所以上面已经阐述得很清楚了,在我们包调用的情况下,instance_path是跟my_app并列的位置上的,所以可以在my_app/__init__.py内的app使用app.instance_path来加载位于与my_app并列的instance中的静态文件,如下:
- instance
- static_file_to_load
- my_app
- run.py