[关闭]
@gzm1997 2018-03-14T09:56:38.000000Z 字数 1146 阅读 1810

flask包调用中的的路径问题

flask深入学习


前言

这篇短文写在我的腾讯一面搞砸之后,这次面试让我深刻认识到我一直是一个很功利的人。总结了一下一共有几个要点:

  • 看需求办事,有什么需求谷歌什么,查看文档相关部分,而其他的部分置之不理,全然没有深入学习的决心
  • 对一个框架没有深入了解,仅仅止步于工具化,也没有对框架有更深层的了解,这让我很惭愧
  • 做事没有从工程层面来思考问题,仅仅从个人角度思考问题

flask包调用过程中的路径问题

假设有如下情况,my_app是封装为包的一个flask app,app声明在my_app/__init__.py文件中,h.py是包内的一个辅助模块,在run_app.py中调用my_app这个包的flask app进行运行


在辅助模块h.py中加载static中的静态文件

当情况是运行run_app.py,而h.py需要加载static中静态文件的时候,在h.py中使用的路径可以是两种情况:

注意包调用情况下,如果包内非__init__模块要加载static内静态文件,需要使用从包外路径开始定位


html内加载静态文件

当情况是运行run_app.py,html内需要加载静态文件,路径必须是相对路径,形式为:/static/file_name


实例文件夹

flask除了提供 app.static_folder和app.template_folder之外
image_1c8h30e029l51fi92jdv9f1rbt9.png-7.8kB
flask还提供了instance_path
image_1c8h31ai6r1hidf187l10fo6q6m.png-4.3kB
instance_path也可以用来存放静态文件,但是要注意的是instance_path所在的位置

flask文档对instance_path位置的阐述如下:

  1. /myapp.py
  2. /instance
  1. /myapp
  2. /__init__.py
  3. /instance
  1. $PREFIX/lib/python2.X/site-packages/myapp
  2. $PREFIX/var/myapp-instance

$PREFIX 是你 Python 安装的前缀。这个前缀可以是 /usr 或者你的 virtualenv 的路径。你可以打印 sys.prefix 的值来查看前缀被设置成了什么

所以上面已经阐述得很清楚了,在我们包调用的情况下,instance_path是跟my_app并列的位置上的,所以可以在my_app/__init__.py内的app使用app.instance_path来加载位于与my_app并列的instance中的静态文件,如下:

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注