Читать локальный файл в Django

Я застрял на этом! Я пишу представление Django, которое читает данные из внешней базы данных. Для этого я использую стандартную библиотеку MySQLdb. Теперь, чтобы загрузить данные, я должен сделать очень длинный и сложный запрос. Я могу жестко закодировать этот запрос на мой взгляд, и это прекрасно работает. Но я думаю, что это не практично; Я хочу иметь возможность изменить запрос в будущем, поэтому я пытаюсь загрузить оператор из текстового файла. Моя проблема в том, что я не знаю, где хранить и как открыть этот файл. Везде, где я делаю, я получаю ошибку "Нет такого файла или каталога". Даже сохранить его в том же каталоге, что и код представления, не удается.

Обратите внимание, что это не загруженный файл; это просто внешний файл, который дополняет мой код. Есть идеи? Заранее спасибо!

2 ответа

Решение

Сохраните файл в корне проекта 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'))

Для этого я бы поместил его в модуль настроек. В 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
Другие вопросы по тегам