UnboundLocalError:赋值前引用的局部变量'system'

时间:2013-05-30 13:18:33

标签: django django-models

虽然有关于这个问题的讨论,但我找不到解决问题的方法。

我在项目中有一些应用程序。在应用程序A的模型中,即“测试”,我有一个表“系统”和一个表“详细信息”。在应用程序B的视图中,即“task1b”,我想对此模型进行查询并在模板中显示结果。 导入Test.models后,我可以在“Detail”模型中进行查询,但不能在“system”中进行查询。 特别是:

#Application: task1b, views.py
from Test.models import *
def task1ba(request):
    systems=system.objects.all()
    return render_to_response("Task1B-A.html", {"systems":systems}, RequestContext(request)) 

如果我把Detail替换为“system”,那么我没有错误。 使用这个模型我过去没有问题。 试图查询任何其他模型而不是“系统”。你认为这是名字问题吗?接受任何想法。

1 个答案:

答案 0 :(得分:3)

正如yedpodtrzitko的评论中所述,我认为import *是你所看到的问题的根源。从Test.models导入所有内容时,会导入导入的所有内容,这会产生意外结果。

以下内容可以作为使用显式导入的一些帮助: pep8 import docs

在上面的代码中使用显式导入看起来像:

from Test.models import system

systems = system.objects.all

但是,似乎'system'这个名称与这里显示的Python标准库os包中的系统函数调用相冲突:

python os.system documentation

对于python类名使用CapWords约定是常规的,因此使用'System'作为Django模型的名称可能是合适的,而不是'system',除非上面的代码包含拼写错误,模型已经声明为class System(...

换句话说,'system'可能会影响内置函数调用,因此如果需要,重命名应该会有所帮助。

修改后的代码为:

#Application: task1b, views.py
from Test.models import System
def task1ba(request):
    systems=System.objects.all()
    return render_to_response("Task1B-A.html", {"systems":systems}, RequestContext(request))