Django-在哪里放置argparse命令来修改-h选项?

Django-在哪里放置argparse命令来修改-h选项?,django,command,argparse,Django,Command,Argparse,我想在我创建的项目中修改我的帮助选项。 我将argparse放在manage.py文件中,如下所示 parser = argparse.ArgumentParser( description="Some desc", formatter_class=argparse.RawTextHelpFormatter ) args = parser.parse_args() print(args) if __name__ == "__main__": os.environ.se

我想在我创建的项目中修改我的帮助选项。 我将argparse放在manage.py文件中,如下所示

parser = argparse.ArgumentParser(
    description="Some desc",
    formatter_class=argparse.RawTextHelpFormatter
)
args = parser.parse_args()
print(args)

if __name__ == "__main__":

    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Reporter.settings")
    try:
        from django.core.management import execute_from_command_line
    except ImportError:
        # The above import may fail for some other reason. Ensure that the
        # issue is really that Django is missing to avoid masking other
        # exceptions on Python 2.
        try:
            import django
        except ImportError:
            raise ImportError(
                "Couldn't import Django. Are you sure it's installed and "
                "available on your PYTHONPATH environment variable? Did you "
                "forget to activate a virtual environment?"
            )
        raise
    execute_from_command_line(sys.argv)
但是当我运行python manage.py-h时,它工作正常(帮助显示),但是当我运行
python manage.py runserver
时,我得到:
manage.py:error:无法识别的参数:runserver
如何解决这个问题?我真的不知道如何修改-h选项

在这个django项目中,我应该把argparse代码放在哪里获得帮助?我知道我可以使用自己的命令,但对我来说,在制作
python manage.py-h

编辑:

在评论的帮助下,我创建了:

#!/usr/bin/env python


def help_parser():
    import argparse
    parser = argparse.ArgumentParser("Some desc",
        formatter_class=argparse.RawTextHelpFormatter
    )
    args = parser.parse_args()
    print(args[0])


def main():
    import os
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Reporter.settings")
    try:
        from django.core.management import execute_from_command_line
    except ImportError:
        # The above import may fail for some other reason. Ensure that the
        # issue is really that Django is missing to avoid masking other
        # exceptions on Python 2.
        try:
            import django
        except ImportError:
            raise ImportError(
                "Couldn't import Django. Are you sure it's installed and "
                "available on your PYTHONPATH environment variable? Did you "
                "forget to activate a virtual environment?"
            )
        raise
    execute_from_command_line(sys.argv)


if __name__ == "__main__":
    import sys

    if sys.argv[1] == '-h':
        help_parser()
    else:
        main()

您可能不应该在这里介绍argparse。如果您正在编写一个自定义管理命令,那么Argparse和Argh非常有用,但对添加自定义管理命令没有太大帮助,因为管理api中已经构建了大多数需求,尽管方式非常不同

例如,只要将.py文件放在正确的位置,就可以在执行
/manage.py-h
时自动显示命令。例如,如果将文件创建为

myapp/management/commands/custom.py
执行manage.py-h将显示

[myapp]
    custom
您可以通过过度设置help变量对其进行进一步自定义

class Command(BaseCommand):
    help = 'Custom help message here'
现在./manage.py custom-h将显示(以及其他内容)


根据讨论添加新答案

通过将
\uuu main\uuu
块下的内容移动到一个单独的函数,您可以让您的老师感到高兴。因此,在
manage.py
中有两个函数,第一个函数在参数为-h时被调用,第二个函数用于其他所有函数。确保manage.py中的所有导入也移动到这些函数内部,而不是处于顶层

然后


其中main()包含标准的django manage.py代码。请注意,此处不需要argparse,因为现在help_parser()只显示应用程序的帮助消息,没有其他事情可做。

我理解。但如果有人没有安装我的应用程序中包含的其他模块,该怎么办。然后,当manage.py自定义时-h不显示帮助,而是显示错误列表。即使出现错误,我如何显示帮助?我开始认为您真正想要创建的是Django CLI应用程序,而不是Django web应用程序。我知道我有requirements.txt。但这款应用的故事要复杂得多。这是我的学习应用程序,老师说即使出现错误列表,我也应该显示帮助。我知道这很愚蠢,但我想确定这是不可能的。好的,最好的方法是首先安装所有的模块,然后调用自定义帮助命令?相信我,我很生气。很抱歉问了个愚蠢的问题,但我需要确认一下。我要告诉他,解决这个问题并获得帮助的唯一方法是安装所有需要的模块。感谢您的帮助仔细想想,您甚至可以将
\uuuu main\uuuu
块下的内容移动到一个单独的函数,从而使它真正起作用。因此,manage.py中有两个函数,第一个函数在参数为-h时被调用,第二个函数用于其他所有函数。确保manage.py中的所有导入也被移动到这些函数内部,而不是处于顶层。很高兴能够提供帮助,祝您的项目一切顺利
Closes the specified poll for voting
if __name__ == "__main__":
    import sys
    if len(sys.argv) == 2 and sys.argv[1] == '-h':
        help_parser()
    else:
        main()