导入视图与从 .导入视图

import views vs from . import views

我是 Python 和 Django 的新手,我有一个名为 calc 的应用程序目录,里面有两个文件:

  1. views.py
  2. urls.py

urls.py中,如果我输入import views,服务器会产生一个错误,但是如果我输入from . import views,一切正常。有人可以解释为什么吗?我认为由于两个 py 文件直接在同一个文件中,所以 import 语句应该匹配 views.py

答案很简单。默认情况下,如果你 import everything,你是从标准的 pythonish 库中导入它。如果将其扩展为 from everything.something import anything,它会检查以 app everything 模块开头的路径。如果不成功,它还会尝试寻找全局。

在你的例子中,它在同一个文件夹(从 . 开始)中寻找模块 views,这不是全局包,所以它不能通过简单的 import views.

由于您的文件在 calc 模块中,因此您必须使用 import calc.views,而不是 import views

然后您可以将某些 view 函数 some_func 称为 calc.views.some_func

或者你可以做import calc.views as views,然后你可以将函数引用为views.some_func,就像你使用from . import views时一样。

您必须在 import calc.views 中包含 calc 前缀的原因是因为这被认为是“绝对导入”,并且 calc 本身不在您的 $PYTHONPATH 中——它的父目录是。

无论如何,您最好坚持使用 from . import views(称为“相对导入”)。