Jul 24
在GAE中遇到一个很怪的模块导入问题,问题的本质,就像Java的classpath设置一样,是python中导入模块时搜索路径的问题。比如站点目录结果如下:
mysite
├─__init__.py
├─models.py
├─templates [dir]
├─static [dir]
└─check [dir]
├─__init__.py
├─views.py
└─models.py
在check目录的views.py中,我想引用根目录中的models.py中的函数,查看网页时,直接报错,找不到导入对
然后觉得很奇怪,就使用相对引用语法,应该能通过编辑器语法检查,但是在AppEngine无法运行。思前想后,应该是sys.path中,代码目录不在模块搜索路径中。搞之,修改django的启动文件,加入:
from os.path import dirname import sys sys.path.append(dirname(dirname(__file__)))
然后将sys.path的内容输出到浏览器,发现一个奇怪的现象:第一次访问时,上面加入的搜索路径是存在的;刷新浏览器后,新加的搜索路径莫明其妙的消失了!
万幸的是,根目录还是在搜索路径中的。所以只能灵活灵活地干活了:即将根目录的models.py,放到一个子目录中,然后使用from common.models import YourModuleObjectName,OK!
mysite
├─__init__.py
├─templates [dir]
├─static [dir]
├─common [dir]
│ ├─__init__.py
│ └─models.py
└─check [dir]
├─__init__.py
├─views.py
└─models.py
最新评论