运行Django自定义管理命令 - 路径问题

3 投票
1 回答
12633 浏览
提问于 2025-04-17 10:12

我不明白为什么这个找不到命令:

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 文件。如果你想改变这个位置,可以通过设置 PYTHONPATHDJANGO_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 目录下,这意味着你的网站和所有命令都会在这个目录中运行。

撰写回答