22

我的 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'

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

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

4

2 回答 2

29

我会建议你使用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'

这种方法适用于任何操作系统,无论您更改项目的文件夹,它仍然有效。

希望这可以帮助!

于 2013-07-01T14:39:40.310 回答
28

@Paulo Bu 的回答是正确的,但是已经过时了。现代的 settings.py 文件有一个 BASE_DIR 变量,您可以将其用于这项工作。

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

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

于 2016-01-28T10:38:30.030 回答