运行Django自定义管理命令 - 路径问题
我不明白为什么这个找不到命令:
khandelwal@simba:/opt/code/cdcschool$ python schoolcommand/manage.py createcampaign
Unknown command: 'createcampaign'
Type 'manage.py help' for usage.
而这个却可以正常工作:
khandelwal@simba:/opt/code/cdcschool$ cd schoolcommand/
khandelwal@simba:/opt/code/cdcschool/schoolcommand$ python manage.py createcampaign
Error: Provide: <type start_date end_date>
这是我命令所在的位置:
$ ls schoolcommand/management/
commands __init__.py __init__.pyc
$ ls schoolcommand/management/commands/
campaignmanager.py createcampaign.py __init__.py
campaignmanager.pyc createcampaign.pyc __init__.pyc
我该怎么修复它,这样我就可以这样做:
khandelwal@simba:/opt/code/cdcschool$ python schoolcommand/manage.py createcampaign
这里是我的 PYTHONPATH、DJANGO_SETTINGS_MODULE 的值,以及我的 settings.py 文件所在的地方。
khandelwal@simba:/opt/code/cdcschool$ ls
Procfile README requirements.txt schoolcommand
khandelwal@simba:/opt/code/cdcschool$ echo $PYTHONPATH
khandelwal@simba:/opt/code/cdcschool$ echo $DJANGO_SETTINGS_MODULE
khandelwal@simba:/opt/code/cdcschool$ find . -name settings.py
./schoolcommand/settings.py
khandelwal@simba:/opt/code/cdcschool$
1 个回答
7
在使用Django的时候,有两个重要的规则。
第一。
你有一个叫做 settings.py
的文件,这个文件必须被网络服务器和所有的 manage.py 命令使用。所有的命令都是这样。
默认情况下,系统会在当前工作目录中寻找 settings.py
文件。如果你想改变这个位置,可以通过设置 PYTHONPATH
和 DJANGO_SETTINGS_MODULE
环境变量来实现。
而 manage.py
文件会和 settings.py
文件放在同一个目录下。
如果你不想使用 manage.py
,你可以用 django-admin.py --settings=some.module
来代替。
第二。
manage.py
的命令没有“路径”这个概念。无论这些命令在你的应用程序树的哪个位置,它们都是单词命令。
你绝对不应该这样做:python schoolcommand/manage.py createcampaign
,除非你的 settings.py
文件不在 manage.py
的同一目录下。
你通常应该这样做:
cd /path/to/your/settings
python manage.py createcampaign
如果你的设置文件在 code/schoolcommand
目录下,这意味着你的网站和所有命令都会在这个目录中运行。