我有一个多个应用程序的项目。 所以,当我需要来自其他应用程序的代码时,我会使用
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"全局名称my_response未定义"
我知道NameError是什么,但为什么在这里呢?如果无法导入某些东西,甚至"全局名称a未定义"我会期待一个ImportError。
我在这里缺少什么?
更新
以下是显示my_response(request,template,context)
所在位置和应用文件结构的屏幕截图。
答案 0 :(得分:2)
当你这样做时
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
来引发的,并且在其他上下文中不会遇到。