我正在使用python 2.7.3上的web.py创建一个web应用程序。 我有以下文件夹结构:当在模块中导入模块时,Web.py NameError
start_app.py
/app
__init__.py
/models
__init__.py
ActionModel.py
AreaModel.py
/controllers
__init__.py
world.py
/views
每当我刚开始使用python start_app.py
的应用程序,并参观world/surrounding
我收到以下错误
<type 'exceptions.ImportError'> at /world/surrounding
cannot import name AreaModel
Python /home/dev/app/models/ActionModel.py in <module>, line 13
Web GET http://localhost:5000/world/surrounding
13号线很简单:from app.models import AreaModel
,但我不知道看看为什么python在这里抱怨。
如果我评论这个导入行,它运行良好。不过,如果我拨打其他网址,例如world/view
,我得到一个错误,AreaModel没有定义。一旦我取消注释该行,对于所有情况(即/周围和/查看)再次正常工作。
我怀疑这与我“圈入口”的事实有关,例如world.py imports AreaModel,AreaModel import ActionModel和ActionModel import AreaModel。 我怀疑这是'pythonic way'做事情甚至'MVC的方式',所以我非常感谢你的启发我如何正确地做到这一点。
注意:应用程序不在我的PYTHONPATH中,但我不认为这是必要的,因为start_app.py位于顶层目录中,并且根据this,所有模块都应该可用。
基本上,它所涉及的是: 我需要模型在控制器和模型中的功能。 “导入圈子”是否是一种好的做法?还是有更好的方法来做到这一点? 另外,这个问题是相关的一般python或只是web.py?
更新: 新增初始化 .py文件,我让他们,但原来的问题没有包括。对不起。
更新: ActionModel.py包括(其中包括)一类名为BaseAction和一些功能,这些功能返回实例或取决于什么类型的行动,我们正在处理BaseAction的子类。他们被称为使用例如ActionModel.get_by_id()
@马修 - 特雷弗:你在一),我应该将这些功能get_by_id()
成一类ActionModel在暗示什么?
#actionmodel.py
class ActionModel(object):
def __init__(arg1, arg2, area_class):
self.area = area_class()
def get_by_id(self, id):
return BaseAction(id)
class BaseAction(object):
def __init__(id):
pass
我不明白这应该如何补救我的进口问题。
我有__init__.py文件,所以这不是问题。无论如何谢谢你指出。我加了他们。 – HereticPilgrim