我正在使用 os 模块在我的 Django 项目 settings.py
文件中具有相对路径。变量 SITE_ROOT 设置为 settings.py
文件的当前工作目录,然后用于引用同样位于同一目录中的所有 static/media
Mục lục.
这是我的问题:
print os.getcwd()
print os.path.abspath(os.path.dirname(__file__))
在 settings.py 中,上述语句都有相同的输出。但是只有当我使用 SITE_ROOT = os.path.abspath(os.path.dirname(__file__))
时我的模板才会加载
Django 在这里寻找模板:
TEMPLATE_DIRS = (
os.path.join(SITE_ROOT, 'templates'),
)
SITE_ROOT 设置为 os.getcwd()
似乎使 Django 在 settings.py
文件上方的目录中查找模板文件夹
我可以很容易地不使用 os.getcwd()
并且我的网站运行良好,但我很好奇这里可能发生了什么 :)
有人知道吗?
正如 mouad 所说,os.getcwd()
不会完全满足您的期望。
os.getcwd()
不仅仅返回当前工作目录。它在您的环境中默认为 $PWD。这不是脚本所在的位置,而是您thực hiện脚本时所处的位置。
hiện hữu /home/user
并执行 python manage.py
,os.getcwd()
将返回 /home/用户
hiện hữu /home/
并执行 python user/manage.py
,os.getcwd()
将返回 /trang chủ
但它仍然不会总是正确的,因为可以使用 os.chdir()
。换句话说,就像做đĩa CD
。它还会改变 os.getcwd()
的返回值。
另一方面。 __tài liệu__
是模块文件的路径。所以你必须使用它来确保有一个相对于你的模块的路径,而不是可能改变的当前工作目录。
正如 ShawnFumo 所说,__tài liệu__
可能并不总是绝对的。要更好地了解它的工作原理,您可以查看该答案:Python __tài liệu__
thuộc tính .此外,从 Python3.4 开始,__tài liệu__
应该始终是绝对路径。
Tôi là một lập trình viên xuất sắc, rất giỏi!