我正在使用 django 并且有一个名为 models.admin.py 的文件,我想在 models.py 中执行以下操作:

from "models.admin" import *

但是,我因使用双引号而出现语法错误。但如果我这样做

from models.admin import *

然后我得到“导入错误:没有名为 admin 的模块”

有什么方法可以从名称中包含句点的 python 文件导入吗?

有帮助吗?

解决方案

其实,你 导入名称无效的模块。但你需要使用 imp 为此,例如假设文件名为 models.admin.py, ,你可以做

import imp
with open('models.admin.py', 'rb') as fp:
    models_admin = imp.load_module(
        'models_admin', fp, 'models.admin.py',
        ('.py', 'rb', imp.PY_SOURCE)
    )

但请阅读文档 imp.find_moduleimp.load_module 在你开始使用它之前。

其他提示

如果您的真正的想,你可以导入一个模块,一个不寻常的文件名(例如,前“的.py”包含文件名“”)使用小鬼模块:

>>> import imp
>>> a_b = imp.load_source('a.b', 'a.b.py')
>>> a_b.x
"I was defined in a.b.py!"

然而,这通常是一个坏主意。它更可能是你正在尝试使用的包,在这种情况下,你应该创建一个名为“A”的目录,包含了一个名为“b.py”的文件;然后 “进口A·B” 将加载一个/ b.py。

该文件称为models/admin.py。 (

也就是说,它应该被称为在一个目录中称为admin.py models

然后就可以导入使用from models.admin import *,假设它是在你的Python路径。

不,你不能,如果其名称包含句号(或问号或感叹号等)导入一个python文件作为一个模块。一个Python模块的名称(不包括的.py)必须是一个有效的Python名称(即可以被用作变量名称)。

您没有引用的文件的在import语句,您引用的模块的和的的。

请阅读文档,他们对此事非常清楚。

不管怎样,因为你使用Django,通常的做法是行不通的。如果你想保持模型在不同的文件,而不是在models.py,你必须采取额外的步骤,概括,例如,的此处

编辑:结果 好了,我真的不知道他什么时候提到管理,以及是否是涉及到的Django管理界面的questioneer意思。我的观点仍然站立。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top