为什么django.utils.importlib.import_module不能导入正确的应用程序?变量如何变化?

时间:2012-12-21 00:04:40

标签: python django django-models django-apps python-import

我有#34;模型未安装或抽象"错误只发生在某些机器而不是其他机器上,当我深入研究时,我发现问题是load_app(self, app_name, can_postpone=False)中的django.db.models.loading.py方法没有像django所假设的那样工作。

在第87行的def load_app(self, app_name, can_postpone=False)中,我添加了一些印刷语句。 (原始代码:https://github.com/django/django/blob/master/django/db/models/loading.py#L87

    self.handled[app_name] = None
    self.nesting_level += 1
    app_module = import_module(app_name)
    print "APP--", app_name
    try:
        print "APPNAME-BEGIN", app_name, type(app_name)
        models = import_module('.models', app_name)
        print "APPNAME-END__", app_name
        print "LOADD", str(models), app_name
    except ImportError, e:

您认为app_name的{​​{1}}与APPNAME-BEGIN中的app_name相同...

这是输出:

APPNAME-END__

2012-12-20 15:44:12.526254500 APPNAME-BEGIN users <type 'str'> 2012-12-20 15:44:12.590877500 APPNAME-END__ gradmaker 2012-12-20 15:44:12.590877500 LOADD <module 'gradmaker.models' from '/home/gradcon4/gradcon4/project/gradmaker/models.pyc'> gradmaker 是如何变化的?为什么输入了错误的模块? (app_name代替gradmaker

在什么条件下会发生这种情况?

1 个答案:

答案 0 :(得分:2)

import X行之一正在筹集ImportError

import gradmaker.models as gradmaker不正确,请改用from gradmaker import models as gradmaker

ImportErrorimport_module调用的其中一个函数捕获,并被跳过。

因此发生此错误的应用程序未正确导入。

修复导入线后,一切都很好。

变量没有改变,发生的是由于错误而导致代码跳出函数,并产生了奇怪的输出。