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

bit*_*old 10 python django relative-path

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

areas = parseXmlFile('xml_files/area.xml')
Run Code Online (Sandbox Code Playgroud)

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

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

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

Pau*_* Bu 22

我建议你以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/')
Run Code Online (Sandbox Code Playgroud)

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

XMLFILES_FOLDER = os.path.join(PROJECT_ROOT, 'f1/f2/xml_files/')
Run Code Online (Sandbox Code Playgroud)

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

from settings import XMLFILES_FOLDER
path = XMLFILES_FOLDER+'area.xml'
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助!


e18*_*18r 16

@Paulo Bu的回答是正确的,但过时了.现代settings.py文件有一个BASE_DIR变量,您可以使用它来完成这项工作.

import os
from yourproject.settings import BASE_DIR
file_path = os.path.join(BASE_DIR, 'relative_path')
Run Code Online (Sandbox Code Playgroud)

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

  • 最好使用`from django.conf import settings`,它更独立于结构. (10认同)