- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在使用 os 模块在我的 Django 项目 settings.py
文件中具有相对路径。变量 SITE_ROOT 设置为 settings.py
文件的当前工作目录,然后用于引用同样位于同一目录中的所有 static/media
目录。
这是我的问题:
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。这不是脚本所在的位置,而是您执行脚本时所处的位置。
在 /home/user
并执行 python manage.py
,os.getcwd()
将返回 /home/用户
在 /home/
并执行 python user/manage.py
,os.getcwd()
将返回 /home
但它仍然不会总是正确的,因为可以使用 os.chdir()
。换句话说,就像做cd
。它还会改变 os.getcwd()
的返回值。
另一方面。 __file__
是模块文件的路径。所以你必须使用它来确保有一个相对于你的模块的路径,而不是可能改变的当前工作目录。
正如 ShawnFumo 所说,__file__
可能并不总是绝对的。要更好地了解它的工作原理,您可以查看该答案:Python __file__
attribute .此外,从 Python3.4 开始,__file__
应该始终是绝对路径。
关于python - os.getcwd() 与 os.path.abspath(os.path.dirname(__file__)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11274040/
我知道 abspath 可以获取一个文件或一组相关文件,并通过在当前目录前添加它们来为它们创建完整路径,如以下示例所示: >>> os.path.abspath('toaster.txt.') 'C:
我目前正在从头开始构建 WordPress 主题,作为“在工作中学习”的一种方式。我在后端工作方面的经验一般,尽管过去我一直非常依赖 PageBuilders。我现在希望创建一个没有任何 Pagebu
鉴于此代码: function main() println("hello") end if abspath(PROGRAM_FILE) == @__FILE__ main() end
我一直在尝试在同一服务器上创建自定义 WP/WooCommerce 网站的虚拟副本。 我已成功将文件移动到子域并创建了临时数据库副本并更新了 wp_config 文件,但我无法弄清楚如何设置 ABSP
通过阅读 stackoverflow 我发现 __file__ 是从中加载模块的文件的路径名,如果它是从文件加载的话 这行代码有什么原因吗? os.path.abspath(__file__) 文档指
也许这个问题很明显,所以请原谅。 我想执行shell命令(Windows 8.1,Python 3.4)来打开带有SVG文件的IE。我这样做是这样的: # imgpath = 'C:/Users/Vl
运行 cygwin perl 时,有没有办法从 cygwin 路径获取 DOS 绝对路径? 理想情况下,它还可以解析 cygwin 符号链接(symbolic link)。 例如。: '/cygdri
我正在尝试在 foldersystem 中使用 os.walk() 找到几个 'my_file.bat',如果文件名匹配它应该用 subprocess.call() 或 .run() 调用。问题是 o
如果我有这样的结构: root/ -- group1/ ---- names/ ---- places/ ------ foo.zip 为什么当我调用 os.path.abspath('foo.zip
我正在尝试将相对路径扩展为绝对路径。相对路径有时会包含一个 . ,它需要从当前工作目录中扩展出来。我想知道 Python 中的任何标准函数是否接受 cwd kwarg,就像 subprocess.po
我不认为我遗漏了什么。话又说回来,我还是个新手。 def GET(self, filename): name = urllib.unquote(filename) full = pat
我有以下包含文件绝对目录的字符串。 'D:\Sample\Project\testXcl\data.xlsx' 将其传递给 os.path.abspath 后,我得到以下结果: 'D:\\Sample
假设文件“file1.txt”的路径是 /home/bentley4/Desktop/sc/file1.txt假设我当前的工作目录是 /home/bentley4 import os os.path.
它们在字符串值上是相等的,但它们真的相等吗?发生了什么事? import os path_name1 = os.path.abspath(os.path.dirname(__file__)) path
我想知道 python 脚本的绝对路径,然后执行以下步骤。 通过 py_compile 将其构建为字节码。 执行它来检查绝对路径。 但是当我执行它时,我得到了2个结果。我发现基于脚本路径的结果后跟py
我在运行 python 脚本(由 ./waf --run 调用)时遇到此错误:TypeError: abspath() 恰好接受 1 个参数(给定 2 个) 问题是它确实被调用了:obj.path.a
在多个开源项目中,我见过有人用os.path.abspath(os.path.realpath(__file__))来获取当前文件的绝对路径。 但是,我发现 os.path.abspath(__fil
我正在使用 os 模块在我的 Django 项目 settings.py 文件中具有相对路径。变量 SITE_ROOT 设置为 settings.py 文件的当前工作目录,然后用于引用同样位于同一目录
在 Python 中,如果路径中包含“~”,我能否确定扩展的用户调用将是绝对路径? 例如,这个表达式是否总是为真? path = '~/.my_app' os.path.expanduser(path
我是 Django 项目的初学者。Django 项目的 settings.py 文件包含这两行: BASE_DIR = os.path.dirname(os.path.dirname(os.path.
我是一名优秀的程序员,十分优秀!