我使用os模块在我的Django项目settings.py文件中有相对路径.变量SITE_ROOT设置为文件的当前工作目录,settings.py然后用于引用static/media同一目录中的所有目录.
继承人我的问题:
print os.getcwd()
print os.path.abspath(os.path.dirname(__file__))
Run Code Online (Sandbox Code Playgroud)
在settings.py中,上述语句都具有相同的输出.但我的模板只会在我使用时加载SITE_ROOT = os.path.abspath(os.path.dirname(__file__))
Django在这里寻找模板:
TEMPLATE_DIRS = (
os.path.join(SITE_ROOT, 'templates'),
)
Run Code Online (Sandbox Code Playgroud)
SITE_ROOT设置os.getcwd()似乎让Django的查找模板文件夹的目录上面的settings.py文件
我可以很容易地不使用os.getcwd(),我的网站运行良好,但我很好奇这里可能会发生什么:)
谁知道?
Loï*_*oix 46
正如穆阿德所说,os.getcwd()不会完全给你你所期待的.
os.getcwd()返回当前工作目录.它在您的环境中默认为$ PWD.它不是脚本所在的位置,而是您执行脚本时的位置.
进入/home/user和做python manage.py,os.getcwd()将返回/home/user
进入/home/和做python user/manage.py,os.getcwd()将返回/home
但它仍然不会总是如此,因为它可以使用os.chdir().换句话说就像在做cd.它还会改变返回值os.getcwd().
另一方面.__file__是模块文件的路径.所以你必须使用它来确保有一个相对于你的模块的路径,而不是可能改变的当前工作目录.
正如ShawnFumo所说,__file__可能并不总是绝对的.为了更好地了解它的工作原理,您可以检查答案:Python __file__属性.此外,从Python3.4开始__file__应始终是绝对路径.
该命令os.path.abspath(os.path.dirname(__file__))返回存储代码文件的目录,但是os.getcwd()为您提供当前工作目录,默认情况下执行代码,后者可以使用os.chdir()命令进行更改.
| 归档时间: |
|
| 查看次数: |
31860 次 |
| 最近记录: |