Django 从其他应用导入代码

Django import code from other apps

我有一个包含多个应用程序的项目。 所以当我想要来自另一个应用程序的一些代码时,我使用

from app.pyfile import *

from app.pyfile import specific_function

更具体地说: 我有一个名为 'commonapp' 的应用程序,其中有一些我在所有其他应用程序中使用的常用内容。在这个应用程序中,我有一个 common.py 文件,其中有一些函数,包括一个名为 my_response(request,template,context) 的函数,它会导致 NameError。现在这个特定的函数总是在其他函数中被调用。

例如:

from commonapp.common import *

def myInfo(request):
    context = {}
    data = ''
    data =  SomeModel.objects.all()
    template = 'path/to/info.html'
    context['data'] = data
    a = my_response(request,template,context)
    return a

这引发了一个 NameError "global name my_response is not defined"

我知道 NameError 是什么,但为什么在这里?如果无法导入某些内容甚至 "global name a is not defined" .

,我会期待一个 ImportError

我在这里错过了什么?

更新:

这是显示 my_response(request,template,context) 位置和应用程序文件结构的屏幕截图。

当你

from commonapp.common import *

所有可以从包中导入的东西都被导入到当前的全局命名空间中。显然 my_response 没有导入(出于某种原因)。 所以,你得到 NameError,因为 my_response 在它执行时被解析,即在

# Python tries to lookup `my_response` in local and then global context
# But, it can't find it, thus NameError exception occurs. 
a = my_response(request,template,context)

ImportError 通常通过导入例程引发,例如 from package import non_existing_function,在其他上下文中不会遇到。