【问题标题】:Read a local file in django在 django 中读取本地文件
【发布时间】:2012-10-15 13:10:54
【问题描述】:

我很坚持这个! 我正在编写一个从外部数据库读取数据的 Django 视图。为此,我使用标准 MySQLdb 库。 现在,要加载数据,我必须执行一个非常长且复杂的查询。我可以在我的视图中对该查询进行硬编码,并且效果很好。 但我认为这不切实际;我希望将来能够更改查询,因此我尝试从文本文件中加载语句。 我的问题是我不知道在哪里存储以及如何打开该文件。无论我在哪里,都会收到“没有这样的文件或目录”错误。即使将其保存在与视图代码相同的目录中也会失败。

请注意,这不是上传的文件;它只是一个完成我的代码的外部文件。 有任何想法吗? 提前致谢!

【问题讨论】:

  • 好吧,实际上我曾尝试将它与视图代码和普通 open() 函数放在同一个目录中。由于它失败了,我试图找到一些信息,但我尝试的一切都失败了(即:将它放在我的应用程序的“静态”子目录中)。绝对路径可行,但我仍然想要更多的灵活性

标签: python django path


【解决方案1】:

将文件保存在 django 项目根目录中,并在 settings.py 文件中添加以下内容。

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

然后在视图中执行此操作。

import os
from django.conf.settings import PROJECT_ROOT

file_ = open(os.path.join(PROJECT_ROOT, 'filename'))

更新:

在较新的 Django 版本中,BASE_DIR 已在 settings.py 文件中定义。因此,您可以执行以下操作。

import os
from django.conf import settings

file_ = open(os.path.join(settings.BASE_DIR, 'filename'))

【讨论】:

  • 考虑到 Django 最新版本的小更新。 from django.conf import settingsfile_ = open(os.path.join(settings.BASE_DIR, 'filename'))
  • ...您所说的“更新或最新”版本是什么意思? django 3.1?
【解决方案2】:

为了这个用途,我会把它放在设置模块中。在settings.py 中,添加例如MY_LONG_QUERY = 'from FOO select BAR...'。然后,在您的视图中,只需像这样从设置中加载它:

from django.conf import settings
settings.MY_LONG_QUERY

但是,这并不能真正回答您的问题。假设权限和一切都正确,请在您的设置中保留对项目根目录的引用,如下所示:

ROOT_PATH = os.path.split(os.path.abspath(__file__))[0]

然后再次在您的视图中,像这样打开您的文件:

from django.conf import settings

def read_from_database(request):
    f = open(os.path.join(settings.ROOT_PATH, 'myfile.db'))
    # Do something with f

【讨论】:

  • 在上一个答案之后,这就是我所做的呵呵。但我也喜欢将查询保存在 settings.py 中的想法!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 2017-07-07
  • 1970-01-01
  • 2014-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多