我有一个较旧的django项目(在1.3很热的时候创建),我试图转换为最新的Django 1.6。
新目录结构已转换为新方式,项目名称已从所有导入中删除(from myproject.api import x
变为from api import x
)
myproject/
myproject/
__init__.py
settings.py
urls.py
api/
__init__.py
resthandler.py
platforms/
__init__.py
plat1/
__init__.py
handlers.py
api/
__init__.py
问题是平台/ plat1 /处理程序试图从/api/resthandler.py导入
来自api.resthandler import RestHandler
但由于已经有一个较低级别的api,因为没有依赖于它的2个级别而且/ api中有2个级别,因此它会因为ImportError而失败。 我尝试将项目级别退回到进口,尝试相对进口,没有任何帮助。我似乎无法从平台/ plat1 /中导入/ api。我要去改变整个结构,但我想知道在走这条路之前我是否遗漏了什么。
答案 0 :(得分:0)
这是python的行为而不是django。 U可能会更改文件夹的名称。其余的将是解决方法,可能会遇到更多麻烦。
答案 1 :(得分:0)
当你说
时问题是平台/ plat1 /处理程序试图从/api/resthandler.py导入
来自api.resthandler import RestHandler
是否要导入根级别“api”或当前文件夹一个? 如果你想要当前文件夹1,这有用吗?:
from .api import resthandler.RestHandler as Plat1RestHandler
答案 2 :(得分:0)
为了将来参考,解决方法是从 future 导入absolute_imports。
from __future__ import absolute_imports
这样所有导入都是root的绝对导入,除非使用点表示法明确指定了相对导入。