问题

在官方 Quickstart 中,建议在使用单个模块时使用__name__:

  1. ...如果您正在使用单个模块(如本例所示),您应该使用__name__,因为取决于它是否开始 应用程序或作为模块导入的名称将不同 ('__main__'与实际导入名)...

但是,在其 API Document 中,当我的应用程序是包时,建议硬编码:

所以你提供的东西很重要。 模块,__name__始终是正确的值.但是,如果您是 使用包,通常建议硬编码你的名字 那里的包装。

我可以理解为什么最好硬编码我的包的名称,但为什么不硬编码单个模块的名称?或者,换句话说,当它收到__main__作为其第一个参数时,Flask能得到什么信息?我无法看到如何使Flask更容易找到资源...

  最佳答案

__name__只是一种方便的方法来获取应用程序定义地点的导入名称. Flask使用导入名称知道在哪里查找资源,模板,静态文件,实例文件夹等.当使用包时,如果您在__init__.py中定义应用程序,那么__name__将仍然指向相对于资源所在地的“正确”位置.但是,如果您在其他地方定义它,例如mypackage/app.py,那么使用__name__会告诉Flask寻找相对于mypackage.app而不是mypackage的资源.

使用__name__对于“硬编码”不是正交的,它只是使用包名称的快捷方式.也没有理由说名称应该是基本包,完全取决于您的项目结构.

  相同标签的其他问题

pythonflaskimportmodulepackage