首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取django应用的绝对路径

获取django应用的绝对路径
EN

Stack Overflow用户
提问于 2012-03-24 07:57:18
回答 6查看 43.9K关注 0票数 36

我正在编写一个单元测试,它需要访问我放在django应用程序目录下的"fixtures“目录中的图像文件。我想在我的测试中使用相对路径打开这个图像文件,这将需要我获得django应用程序的绝对路径。有没有办法获得django应用程序的绝对路径?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-03-27 11:09:19

Python模块(包括Django应用程序)有一个__file__属性,该属性告诉您它们的__init__.py文件在文件系统上的位置,因此

代码语言:javascript
复制
import appname
pth = os.path.dirname(appname.__file__)

应该做你想做的事。

在通常情况下,os.path.absname(appname.__path__[0]),但如果应用程序想要以一种奇怪的方式导入文件,则可以更改这一点。

(不过,我总是在我的settings.py中执行PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) --这使得需要绝对路径的各种设置变得很容易。)

票数 64
EN

Stack Overflow用户

发布于 2018-04-17 17:09:19

因此,公认的答案通常工作得很好。但是,对于

具有多个路径的

  • 命名空间包,或在配置

中显式配置其路径的

  • 应用程序

它们的预期路径可能与模块的__file__属性不一致。

Django (1.7+)提供了AppConfig.path属性--我认为即使在简单的情况下,这个属性也更清晰,它也涵盖了这些边缘情况。

The application docs告诉您如何获取AppConfig对象。因此,要获取AppConfig并打印其中的路径:

代码语言:javascript
复制
from django.apps import apps
print(apps.get_app_config('app_label').path)

编辑:修改了如何使用get_app_config删除点的示例,这似乎令人困惑。Here are the docs for reference

票数 17
EN

Stack Overflow用户

发布于 2012-03-24 08:00:44

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

代码语言:javascript
复制
import os.path

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

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

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9847911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档