22

我刚刚安装了 django,我正在他们的网站上做教程。

我在命令行上按照他们的指示进行操作,但我想知道为什么?

例如,您可以访问命令'manage.py startapp xyz',它会创建一个包,但是当我查看manage.py时,它只包含以下代码(由django添加,我没有触摸manage.py )

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "DjangoProject12.settings")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

我在 manage.py 或其他任何地方都看不到 startapp 的任何方法。我不确定这是否是 django 特有的,或者我的 python 知识是否存在一些根本性的差距。谢谢你。

4

1 回答 1

28

您需要查看django.core.management包装;该execute_from_command_line()函数接受sys.argv命令行参数并从那里获取它。

manage.py startapp xyz在命令行上输入时,sys.argv设置为['manage.py', 'startapp', 'xyz'].

这些被传递给一个ManagementUtility实例,它有一个.execute()方法来进行实际的解析。

整个django.core.management包装是模块化的;.commands子包包含该工具的各种标准命令manage.pydjango.core.management.commands.startapp例如,处理startapp子命令。

于 2013-04-19T14:03:12.747 回答