Читать локальный файл в 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