如何将django模块添加到pydiction字典?

spe*_*eck 3 python django vim

我正在尝试使用pydiction在VIM编辑器中自动完成Python/Django语句.

当我尝试使用以下方法将django模块添加到complete-dic时:

python pydiction.py /usr/lib/pymodules/python2.6/django
Run Code Online (Sandbox Code Playgroud)

要么:

python pydiction.py /usr/lib/pymodules/python2.6/django/__init__.py
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

无法导入:(...).不支持按文件名导入.

谢谢!

Pydiction:http://www.vim.org/scripts/script.php? script_id = 850

小智 6

提出这个问题已经有一段时间了.我遇到了类似的问题.以下步骤说明如何快速完成.

由于pydiction.py不会递归地解析包,因此我不得不使用find和vi为Django构建包列表.假设你已经安装了django /usr/local/lib/python2.6/dist-packages/django.然后执行以下操作:

cd /usr/local/lib/python2.6/dist-packages
find django -type d > /var/tmp/django_pkgs.sh
Run Code Online (Sandbox Code Playgroud)

在vim中打开django_pkgs.sh并删除包含媒体,静态,模板,gis,fixtures,tests,locale,localflavor等的所有行.在vim中,它很容易.从vim控制台本身执行以下操作:

:g/media/d
:g/static/d
:g/templates/d
....
....
....
Run Code Online (Sandbox Code Playgroud)

从列表中删除所有不需要的文件后,请替换all/with.从vim控制台中执行以下操作:

:%s!/!.!g
Run Code Online (Sandbox Code Playgroud)

这会将文件路径转换为完全限定的Python模块名称.然后用空格替换所有换行符.在vim控制台中执行以下操作:

%s/\n/ /
Run Code Online (Sandbox Code Playgroud)

请注意,最后两个正斜杠之间只有一个空格字符.现在,您将所有模块名称列在一行中.现在在文件的第一行添加#!/ bin/bash.这样,我们将文件转换为bash脚本.现在在第二行和第三行添加以下内容(正如oivvio在之前的一篇文章中所解释的那样):

export DJANGO_SETTINGS_MODULE=settings
export PYTHONPATH=/path/to/parent/of/settings
Run Code Online (Sandbox Code Playgroud)

请将最后一行中提到的路径替换为保存django settings.py的目录.

然后在列出django模块的行的开头,添加以下内容

python ./pydiction.py
Run Code Online (Sandbox Code Playgroud)

这条线现在应该是这样的

python ./pydiction.py django django.contrib django.contrib.redirects ......
Run Code Online (Sandbox Code Playgroud)

现在退出vim并运行

chmod +x /var/tmp/django_pkgs.sh.
Run Code Online (Sandbox Code Playgroud)

然后切换到保存complete-dict和pydiction.py的目录并执行/var/tmp/django_pkgs.sh.您确实需要对文件complete-dict的写访问权限.如果你的包列表文件是正确的,一切都会正常工作.否则,您将在导入不存在的django模块时在控制台上看到各种错误.要修复它们,请在django_pkgs.sh文件中标识此类条目并手动删除它们.然后再次执行相同的脚本.

我宁愿pydiction.py做一个模块的递归搜索,而不是每个人手动准备模块列表.可能已经将一个命令行参数(如-r)添加到pydiction中以自动执行此操作.:(