【问题标题】:How can I use relative path to read local files in Django app?如何使用相对路径读取 Django 应用程序中的本地文件?
【发布时间】:2013-06-28 16:07:30
【问题描述】:

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

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

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

【问题讨论】:

    标签: python django relative-path


    【解决方案1】:

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

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

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

    【讨论】:

    • 最好使用from django.conf import settings,它更独立于结构。
    【解决方案2】:

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

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

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 2013-11-21
      • 2011-06-30
      • 2019-05-16
      • 1970-01-01
      • 2011-12-18
      • 2012-03-02
      相关资源
      最近更新 更多