Django从其他应用程序导入代码

时间:2017-04-12 07:51:56

标签: python django nameerror

我有一个多个应用程序的项目。 所以,当我需要来自其他应用程序的代码时,我会使用

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)所在位置和应用文件结构的屏幕截图。

enter image description here

1 个答案:

答案 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来引发的,并且在其他上下文中不会遇到。