在django中读取本地文件

fen*_*oxp 17 python django path

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

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

Rag*_*gar 35

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

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
Run Code Online (Sandbox Code Playgroud)

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

import os
from django.conf.settings import PROJECT_ROOT

file_ = open(os.path.join(PROJECT_ROOT, 'filename'))
Run Code Online (Sandbox Code Playgroud)

更新:

在较新的Django版本BASE_DIR中已经在settings.py文件中定义.所以你可以做到以下几点.

import os
from django.conf import settings

file_ = open(os.path.join(settings.BASE_DIR, 'filename'))
Run Code Online (Sandbox Code Playgroud)

  • 考虑到最新版本的 Django 的小更新。`从 django.conf 导入设置``file_ = open(os.path.join(settings.BASE_DIR, 'filename'))` (4认同)

jro*_*jro 5

对于这种用途,我将其放入设置模块中。在 中settings.py,添加例如MY_LONG_QUERY = 'from FOO select BAR...'。然后,在您看来,只需从设置中加载它,如下所示:

from django.conf import settings
settings.MY_LONG_QUERY
Run Code Online (Sandbox Code Playgroud)

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

ROOT_PATH = os.path.split(os.path.abspath(__file__))[0]
Run Code Online (Sandbox Code Playgroud)

然后再次在您的视图中打开文件,如下所示:

from django.conf import settings

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