当前位置: 首页 > 面试题库 >

获取Flask应用程序的根路径

子车宏浚
2023-03-14
问题内容

我正在开发Flask扩展名,我想从该扩展名在文件系统上项目的根路径中创建目录。

假设我们有这个目录结构

/project
    /app
    /tests
    /my_folder
    manage.py

my_folder应该由扩展名动态创建,扩展名是一个测试实用程序,并将被测试的应用程序包装在/ tests目录中。但是,我正在努力确定扩展中项目的根路径。

现在,我试图从运行文件中猜测路径:

def root_path(self):
    # Infer the root path from the run file in the project root (e.g. manage.py)
    fn = getattr(sys.modules['__main__'], '__file__')
    root_path = os.path.abspath(os.path.dirname(fn))
    return root_path

一旦在IDE中而不是manage.py中运行测试,这显然会中断。我可以简单地推断出相对于app或tests目录的项目根目录,但是我不想对这些目录的名称或结构进行任何假设(因为多个应用程序可能作为子包托管在单个包中)。

我想知道是否有针对此类问题的最佳实践或Flask对象提供的未记录方法(例如get_root_path)。


问题答案:

app.root_path包含应用程序的根路径。这取决于传递给的名称Flask。通常,你应该使用实例路径(app.instance_path)而不是根路径,因为实例路径将不在包代码中。

filename = os.path.join(app.instance_path, 'my_folder', 'my_file.txt')


 类似资料:
  • 问题内容: 在我的烧瓶应用程序中,我每次启动时都会重新创建一个sqlite数据库。 为此,我使用官方网页上显示的代码 我的项目结构如下所示 现在我的StubbyServer.py包含: 如果我的工作目录是命令运行正常 如果我的工作目录是命令,则失败并显示: 在get_db中的文件“ app / StubbyServer.py”中,第43行 带有open(’ schema.sql ‘,mode =’

  • 问题内容: 我正在渲染一个模板,尝试使用外部样式表进行样式设置。文件结构如下。 mainpage.html看起来像这样 我的样式均未应用。它与html是我正在渲染的模板有关吗?python看起来像这样。 我知道这很有效,因为我仍然能够渲染模板。但是,当我尝试将样式代码从html的“ head”标记中的“样式”块移动到外部文件时,所有样式消失了,仅留下了一个html页面。有人看到我的文件结构有任何错

  • 主要内容:调试模式要测试Flask安装是否成功,在编辑器中输入以下代码,并保存到文件: 中。 在项目中导入模块是强制性的。 Flask类的一个对象是WSGI应用程序。 Flask构造函数将当前模块的名称()作为参数。 Flask类的函数是一个装饰器,它告诉应用程序哪个URL应该调用相关的函数。 rule 参数表示与该函数绑定的URL。 options 是要转发给底层Rule对象的参数列表。 在上面的例子中, URL

  • 问题内容: 我的Flask应用程序结构如下所示 当我运行时,它将在处启动服务器。在我,我尝试打开该文件作为 它给出了错误 如何访问此文件? 问题答案: 认为问题出在你/的道路上。删除,/因为与处于同一级别。 我建议将水平设置为或许多Flask用户喜欢使用,但我不喜欢。 如果这是你要设置的方式,请尝试以下操作: 现在,你可以轻松执行以下操作: 根据需要调整路径和级别。

  • 问题内容: 我正在尝试将上载的多部分文件写入文件系统。我有一个名为audio的目录,该目录位于Web应用程序的根目录中(不在WEB- INF内,但在它旁边,可以像CSS和javascript一样公开访问)。 我想将上传的文件写入该目录,但似乎无法获取所需的路径。我以为使用ServletPath()然后使用realPath()可能可行,但是我没有通过Spring控制器对ServletContext的

  • 我正试图得到一个简单的搜索功能与我的烧瓶应用程序。我有以下启动搜索的代码 这与我的搜索/controllers.py脚本连接起来,看起来像这样 不幸的是,每当我实际搜索时,都会出现路由错误: FormDataRoutingRedirect:已向此URL发送请求(http://localhost:8080/search)但路由系统自动发出重定向到“http://localhost:8080/sear