【问题标题】:Function call using import in web2py在 web2py 中使用导入的函数调用
【发布时间】:2011-09-27 06:31:48
【问题描述】:

我已将代码拆分为多个文件。我已将所有其他文件中的所有功能导入到 admin.py 中。假设我想调用一个函数 XYZ。如果我将函数路径指定为admin/XYZ,则会将错误视为无效函数,为此我必须将路径指定为file_with_XYZ_function/XYZ

有没有办法克服这个问题,并从一个文件中简单地调用所有导入的函数

【问题讨论】:

  • 你有 XYZ 作为文件名吗?
  • 哪个代码?你的代码? admin.py 是您自己的功能还是您更改了 gluon/admin.py 核心文件? yourapp/modules 下的 admin/XYZ 文件在哪里?很抱歉,我们需要更多信息。如果您在 web2py 邮件列表中提问,您将获得更好的支持。
  • 对不起,我已经编辑了问题本身。 admin.py 是我自己的文件(在控制器中),我在该文件中导入了一个 XYZ 函数。我不能像调用 admin.py 中定义的函数一样调用该函数
  • 注意,web2py 控制器(和模型)文件不是 Python 模块,因此您不要从它们导入。您应该将模块放在 /app/modules 文件夹中。你想达到什么目的?您是否只是为了组织目的而尝试将您的功能放入多个控制器文件中,但您的 URL 中只需要一个控制器名称?在这种情况下,您可以通过 URL 重写功能实现您的目标。
  • 感谢 URL 重写功能,这正是我正在寻找的。​​span>

标签: python function import call web2py


【解决方案1】:

注意:这可能无法回答您的问题,因为我不确定我是否理解您的问题......

但是,如果您想将一些代码放入(共享)模块中并从您的多个控制器中包含它,我建议您查看@987654321 的第四章(核心) @ 并搜索 local_import

对于这种情况,web2py 提供另一种导入模块的方法 这样全局 sys.path 不改变:通过将它们放在 应用程序的“模块”文件夹。 一个好处是该模块 将被自动复制并 随应用程序分发; 然而,有一定的 适用的限制。 web2py 提供了一个 local_import 函数 必须用于从 “模块”文件夹。

模块的导入取决于模块以及 web2py 可以在哪里找到它们。如果它是 web2py 可以在 sys.path 或 web2py/site-packages 中找到的标准模块,import modulename 应该可以按预期工作。

对于您应用的本地模块,web2py 提供了其他功能:applications/appname/modules

可以使用local_import 导入这些模块。

mymodule = local_import(themodule)

这会在应用程序本地模块文件夹中导入名为 themodule 的模块,并使其在名称 mymodule 下可用。请注意,local_import 支持两个附加参数:reload 和 app。在开发过程中,模块代码经常发生变化,所以不要忘记告诉 web2py 在每次请求时使用参数reload=True 重新加载模块,否则除非重新启动 web2py,否则您将看不到您的更改。

【讨论】:

  • 注意,从 web2py 1.96.1 开始,local_import 已被弃用。您现在可以使用标准 Python 导入语句从 /app/modules 文件夹导入模块。例如,对于 /app/modules/mymodule.py,只需执行 import mymodule
【解决方案2】:

您可以在 modules 文件夹中创建 python 文件并导入它们,就像在控制器中导入 python 库一样。但是您必须提供这些文件的路径,例如

 from applications.myApp.modules.myModule import *

这是我的包装器解决方案。现在您可以通过调用函数的名称来使用函数

我的函数

【讨论】:

  • 感谢您的回复。如果我必须从文件中的某个位置调用该函数,您所说的是真的。如果我想直接从我导入它们的文件中使用相同的函数,它会找不到这样的函数(您可以参考我的问题了解更多详细信息。)
  • 您不能像文件中的本机函数那样调用这些函数,因为您导入的那些函数是在运行时导入的,因此您的服务器无法将请求定向到这些函数,因为它们不存在。作为最后的手段,您可以将调用这些导入函数的虚拟函数放置在其中。一切都发生了。
  • 那是我们使用 URL 重写的地方 :)
猜你喜欢
  • 1970-01-01
  • 2013-05-05
  • 2023-01-10
  • 2022-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多