Tag Archive for ‘django’

用Vim写django程序时omni失效的问题

只要在 PYTHONPATH 中的程序,用Vim的时候就能够使用omni智能提示功能。
最近新学django,所以把用django-admin 生成的项目目录加入到PYTHONPATH,这样就能使用Vim的omni对这个项目里的模块实现代码提示功能了。

但是用了不久后,发现对某些模块操作时omni功能失效了- -,研究了一下发现是只要导入了django.db.models的模块,智能提示就会失效。

然后我在终端的python中单独导入django 的 models 模块,发现会有异常,原因是那个 django.db 里面会导入 django.conf.settings 对象,然后还会去设置他的属性,这一下就玩完了,因为那里面会检查系统的 DJANGO_SETTINGS_MODULE 值,可以在django/conf/__init__.py中的LazySettings这个类里看到,如果没的话就有异常了。
这个系统值应该是启动server的时候设置的,可以在manager.py里面看到。

这样一来肯定是由于Vim的python omni程序导入模块时一旦碰到异常就不继续了,所以智能提示失效了。

为此我在导入django的models时做了下处理

try:
    from django.db import models
except ImportError:
    from django.core import management
    management.setup_environ(settings)
    from django.db import models

哈哈,这样就好了,那个settings是当前项目中的settings模块。
要是有更好的办法欢迎提示阿。