如何使用相对路径读取Django应用程序中的本地文件?

2024-05-13 21:03:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我的django应用程序必须从文件系统中读取一些文本文件。所以我在我的应用程序目录中创建了一个目录,并使用相对路径打开和读取文件。

areas = parseXmlFile('xml_files/area.xml')

当我使用manage.py runserver运行服务器进行调试时,没关系。但是我使用manage.py runfcgi host=127.0.0.1 port=8081运行服务器,Django找不到文件:No such file or directory: 'xml_files/area.xml'

我不想使用绝对路径,这意味着我需要修改很多代码。

如何解决使用相对路径打开本地文件的问题?


Tags: 文件djangopy目录应用程序manageareafiles
3条回答

我建议您使用absolute path,但使用的方式要聪明一些。在你的settings.py中声明类似于XMLFILES_FOLDER的内容,并让你的settings.py像这样:

import os
settings_dir = os.path.dirname(__file__)
PROJECT_ROOT = os.path.abspath(os.path.dirname(settings_dir))
XMLFILES_FOLDER = os.path.join(PROJECT_ROOT, 'xml_files/')

这是假设xml_files文件夹位于项目根文件夹下,如果不是,只声明从项目根文件夹到xml_files的相对路径

XMLFILES_FOLDER = os.path.join(PROJECT_ROOT, 'f1/f2/xml_files/')

这样,只要在代码中想访问该目录中的文件,就可以执行以下操作:

from settings import XMLFILES_FOLDER
path = XMLFILES_FOLDER+'area.xml'

这种方法可以在任何操作系统中使用,而且无论您更改项目的文件夹,它仍然可以使用。

希望这有帮助!

@保罗布的回答是正确的,但已经过时了。Modern day settings.py文件有一个BASE_DIR变量,您可以用于此努力。

import os
from yourproject.settings import BASE_DIR
file_path = os.path.join(BASE_DIR, 'relative_path')

请记住,相对路径来自Django项目的根文件夹。

@保罗布的回答是正确的,但已经过时了。Modern day settings.py文件有一个BASE_DIR变量,可以用于此努力。

import os
from yourproject.settings import BASE_DIR
file_path = os.path.join(BASE_DIR, 'relative_path')

请记住,相对路径来自Django项目的根文件夹。

相关问题 更多 >