获取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,虽然 - 很容易让那些需要是绝对路径的各种设置)

+1

这实际上并不正确,因为appname .__ path__是列表,而不是字符串。见http://docs.python.org/2/tutorial/modules.html#packages-in-multiple-directories – 2012-12-06 12:13:26

+5

@GeorgeLund当然,你是对的;我很愚蠢。你可以做'appname .__ path __ [0]',尽管它似乎有可能改变它;你也可以使用'os.path.dirname(appname .__ file __)',因为'__file__'指向'__init __。py'文件。 – Dougal 2012-12-06 17:33:45

+0

你可以改变你的答案以符合你的评论,因为答案是大多数人首先看到的。 – Igor 2016-07-15 19:04:18

通常,这是我在我的settings.py文件中添加的,所以我可以引用项目根目录。

import os.path 

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) 

此方法将获得任何python文件的目录。

+0

这是聪明的,但它给人的路径项目不应用。在我的情况下,它会工作得很好,因为在文件系统中,我的应用程序存在于项目之下,否则它不会生成。有什么办法可以实际获得应用程序的路径吗?或者这是我能得到的最接近的? – tamakisquare 2012-03-24 00:10:17

+0

您可以在碰巧存在于应用中的文件中使用它,或者使用os.path.join() – Kekoa 2012-03-24 00:12:36

+0

将文件夹内的应用程序的路径追加到PROJECT_ROOT。明白了。谢谢:) – tamakisquare 2012-03-24 00:15:31