如何使“urlpatterns=\uu import\uuu(<string\u name>)”像正常的import语句一样工作?

2024-03-28 09:04:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个可与其他项目插入的import语句。 此声明位于网址.py你知道吗

所以这是可行的:

from forum.urls import urlpatterns
# Base Class:   <type 'list'>

但这行不通:

from settings import ROOT_URLCONF as project_urls
urlpatterns = __import__(project_urls)
# Base Class:   <type 'module'>

我怎样才能让后者工作呢?你知道吗


Tags: 项目frompyimportproject声明basetype
2条回答

所以您想要有相对于早期导入的import语句?你知道吗

肯定是我曾经试过的。我有一些很长的import语句,它们有一个共同的根,所以我试着把它分解出来。我无法让它与直接的导入语句一起工作,但可能我没有足够努力。你知道吗

请记住,import语句的默认行为将创建一个模块对象。它会把它绑在一起系统模块,然后使用import语句中的名称将其绑定到当前模块的命名空间中。见http://docs.python.org/tutorial/modules.html。你知道吗

模块对象具有命名空间。如果一个模块不是一个包,那么它的名称空间来自于对该模块的.py文件内容的求值。但是,如果它是一个包,那么名称空间来自包中的__init__.py模块。包中的其他模块不会自动导入,并且在包的命名空间中不可用。你必须分别导入它们。你知道吗

from…import语句将模块加载到系统模块. 然后它会将对象从导入中引用的模块中拉出。最后,它使用import语句中的名称将该对象绑定到当前模块的命名空间中。基本上是将绑定从一个命名空间复制到另一个命名空间。老实说,我发现当你以后使用它时,它通常会混淆名称的来源(所以我不怎么做)。你知道吗

切中要害:

使用__import__是绕过import语句限制的一种方法。见the python documentation。但是,如果使用from..import语句,不要尝试重用__import__中的结果名称,除非它指向模块对象(可能不是)。导入只需要一个以点分隔的模块名序列。你知道吗

另外,请记住,仅放置显式导入可能是指示对象来自何处的更干净的方法。你知道吗

urlpatterns = __import__(project_urls).whateversubmodule.urlpatterns

相关问题 更多 >