当创建 Flask 实例时,我们总是使用 __name__ 作为第一个参数, 但是为什么?
class flask.Flask(import_name, static_path=None, static_url_path=None,static_folder='static', template_folder='templates', instance_path=None, instance_relative_config=False)
官方文档说第一个参数是用来找资源的,怎么办?
请您参考如下方法:
导入名称用于解析安装 Flask 应用程序的目录(参见 get_root_path 中的 flask/helpers.py 函数)。这使得 render_template、send_static_file 和 config 中的相对文件路径无需文件即可解析为应用程序文件夹中的文件要提供的路径。
考虑一个没有此功能的极其简单的 Python 应用程序:
simple_app.py
print("Running simple_app")
with open('the-folder/simple.file', 'r') as f:
for line in f:
print(f)
简单文件
Hello
World!
目录结构如下:
some-path/
simple-app/
simple_app.py
the-folder/
simple.file
如果我们在当前工作目录是 simple-app/ 时启动 Python,一切都会正常工作:
simple-app$ python simple_app.py
Running simple_app
Hello
World!
但是如果我们向上移动一个文件夹并重试:
some-path$ python simple-app/simple_app.py
Traceback (most recent call last):
IOError: [Errno 2] No such file or directory: 'the-folder/simple.file'
当我们向下移动一个文件夹时会发生同样的事情。然而,如果我们能得到 simple_app.py 在文件系统上的位置,我们就可以os.join simple_app.py 所在的目录> 安装了 the-folder/simple.file
with open(os.join(SIMPLE_APP_DIR, 'the-folder/simple.file', 'r') as f:
我们的工作目录并不重要,因为我们总是处理绝对路径。这就是 Flask 所做的,这就是为什么它需要传入 __name__ 的原因。
