让django自定义命令起作用时遇到问题。
来自django documetation,已经放置了
application/
manage.py
blog/
__init__.py
models.py
management/
__init__.py
commands/
__init__.py
myapp_task.py
views.py
myapp_task.py内容
from django.core.management.base import NoArgsCommand
class Command(NoArgsCommand):
def handle_noargs(self, **options):
print 'Doing task...'
# invoke the functions you need to run on your project here
print 'Done'
跑步时
python manage.py myapp_task
收到错误
Unknown command: 'myapp_task'
答案 0 :(得分:49)
你的答案中的目录结构有点含糊不清;当放置文件时,如下django应该能够找到你的命令:
project/ # in your question this would be 'application'
manage.py
blog/
__init__.py
models.py
management/
__init__.py
commands/
__init__.py
myapp_task.py
views.py
此外,您需要在settings.py
:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.admin',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'blog', # <= your app here ...
)
答案 1 :(得分:3)
我遇到了同样的问题。原因是项目根目录不在我的$ PYTHONPATH中。在这种情况下的解决方案是键入(在Linux机器上)像
这样的东西PYTHONPATH=./project python manage.py myapp_task
答案 2 :(得分:0)
我认为命令/需要在管理/目录中。
答案 3 :(得分:0)
如果项目是字节编译的,django.core.management.find_commands()将只查找.py文件。如果您的自定义命令位于.pyc文件中,则需要使用https://code.djangoproject.com/ticket/19085处的补丁修补django / core / management / commands / __ init__.py
答案 4 :(得分:0)
您好我也有这个问题,发现我正在将参数标识符与文件名
混合在一起所以该文件是您想要的命令的名称,即updater
我将 updatefiles.py 更改为 updater.py
class Command(BaseCommand):
help = 'Update Files Since \'X\' Days Ago'
def add_arguments(self, parser):
parser.add_argument('updatefiles', nargs='+', type=int)
def handle(self, *args, **options):
days_ago = int(options['updatefiles'][0])
days_ago = (days_ago * -1) if days_ago < 0 else days_ago
self.stdout.write('Adding files since %s days ago' % days_ago)
add_files_function(days_ago)
然后运行我会用
python manage.py updater
答案 5 :(得分:0)
我有同样的问题。我从和示例中剪切并粘贴了文件名,并在文件名的开头粘贴了一个空格。因此Django无法找到它。
答案 6 :(得分:0)
我的问题是在我的主应用程序中添加管理目录,也就是在我的 settings.py 旁边 一旦我将它添加到另一个应用程序,它就可以工作了
答案 7 :(得分:-2)
这是因为 init .pyc不会在“management”和“commands”文件夹中自动创建。复制your_app/__init__.py
和your_app/__init__.pyc
并将其粘贴到management /和commands /文件夹中。