获取django应用程序的绝对路径
我正在编写一个单元测试,需要访问我放在我的django应用程序目录下“fixtures”目录下的图像文件。我想在我的测试中使用相对路径打开这个图像文件,这将需要我获得django应用程序的绝对路径。有没有办法获得django应用程序的绝对路径?获取django应用程序的绝对路径
Python模块(包括Django的应用程序)有一个__file__
属性,它告诉你在文件系统中的文件__init__.py
的位置,所以
import appname
pth = os.path.dirname(appname.__file__)
应该做你想要什么。
在通常情况下,os.path.absname(appname.__path__[0])
,但如果他们想以怪异的方式导入文件,应用程序可能会更改它。
(我总是做PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
在我settings.py
,虽然 - 很容易让那些需要是绝对路径的各种设置)
通常,这是我在我的settings.py文件中添加的,所以我可以引用项目根目录。
import os.path
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
此方法将获得任何python文件的目录。
这是聪明的,但它给人的路径项目不应用。在我的情况下,它会工作得很好,因为在文件系统中,我的应用程序存在于项目之下,否则它不会生成。有什么办法可以实际获得应用程序的路径吗?或者这是我能得到的最接近的? – tamakisquare 2012-03-24 00:10:17
您可以在碰巧存在于应用中的文件中使用它,或者使用os.path.join() – Kekoa 2012-03-24 00:12:36
将文件夹内的应用程序的路径追加到PROJECT_ROOT。明白了。谢谢:) – tamakisquare 2012-03-24 00:15:31
这实际上并不正确,因为appname .__ path__是列表,而不是字符串。见http://docs.python.org/2/tutorial/modules.html#packages-in-multiple-directories – 2012-12-06 12:13:26
@GeorgeLund当然,你是对的;我很愚蠢。你可以做'appname .__ path __ [0]',尽管它似乎有可能改变它;你也可以使用'os.path.dirname(appname .__ file __)',因为'__file__'指向'__init __。py'文件。 – Dougal 2012-12-06 17:33:45
你可以改变你的答案以符合你的评论,因为答案是大多数人首先看到的。 – Igor 2016-07-15 19:04:18