我阅读了django doc和一些SO帖子,以了解manage.py和django-admin.py之间的区别。
他们都说:
在每个Django项目中自动创建manage.py. manage.py 是一个围绕django-admin.py的薄包装器,可以处理两件事 在委托给django-admin.py之前为你服务:
- 它将您的项目包放在sys.path上。
- 设置DJANGO_SETTINGS_MODULE环境变量,使其指向 你的项目的settings.py文件。
醇>
所以我检查了这两个文件的scource代码(最新版本,所以它是doc)。
然后我很困惑。第二件事是manage.py
:设置DJANGO_SETTINGS_MODULE环境变量。除此之外,我真的找不到这两个脚本之间的任何差异。
[django-admin.py]
#!/usr/bin/env python
from django.core import management
if __name__ == "__main__":
management.execute_from_command_line()
[manage.py]
#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
为什么呢? django文档是否已过时?或者我错过了什么?将项目包放在sys.path上的代码在哪里?
答案 0 :(得分:3)
sys.path
使用位于here的handle_default_options(options)
语句更新here。执行路径如下:
execute_from_command_line(argv)
(您的manage.py
)utility.execute()
here handle_default_options(options)
here Command
类使用相同的方法作为管理命令的基类。
答案 1 :(得分:1)
从我所看到的不是./manage.py
谁"将你的项目包放在sys.path上。"
The doc说:
sys.path从这些位置初始化:
- 包含输入脚本的目录(或未指定文件时的当前目录)。
- PYTHONPATH(目录名列表,语法与shell变量PATH相同)。
- 依赖于安装的默认值。
依赖于安装的默认值必须是site.py
添加的内容。但可以使用-S
开关禁用它。现在,当我运行此脚本(1.py
)时:
import sys
print(sys.path)
我明白了:
$ python -S ../1.py # to show that it's not current directory that is added
['/path/to/the/script/directory', '/usr/lib/python35.zip', '/usr/lib/python3.5/', \
'/usr/lib/python3.5/plat-linux', '/usr/lib/python3.5/lib-dynload']
因此,当您运行django-admin
时,/path/to/env/bin/django-admin
将成为sys.path
上的第一个./manage.py
。当/path/to/project
,./manage.py
。
因此,可以说<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<body>
<div class="dropdown">
<button class="btn btn-primary dropdown-toggle" type="button" id="ddButton" data-toggle="dropdown">Button</button>
<ul class="dropdown-menu" role="menu">
<li><a href="#">HTML</a></li>
<li><a href="#">CSS</a></li>
<li><a href="#">JavaScript</a></li>
</ul>
</div>
</body>
</body>
</html>
&#34;将您的项目包放在sys.path上,&#34;但间接地,通过成为项目的根源。