Невозможно получить доступ к файлу в качестве базы данных в Django - PullRequest
0 голосов
/ 02 марта 2011

В моем приложении django структура выглядит следующим образом:

__init__.py  
__init__.pyc  
models.py
tests.py  
usage.rrd  
views.py  
views.pyc

Я пытаюсь получить доступ к файлу usage.rrd в views.py следующим образом:

from django.http import HttpResponse
import rrdtool

def hello(request):
        info = rrdtool.info('usage.rrd')
        return HttpResponse(info)

но я получаю:

открытие '/usage.rrd': такого файла нет или каталог

несмотря на то, что находится в текущем каталоге.

Ответы [ 2 ]

1 голос
/ 02 марта 2011

Приложение запускается из корневого каталога вашего проекта.Таким образом, вам нужно исправить свой путь, ('app-name / creation.rrd').

0 голосов
/ 02 марта 2011

Как уже упоминалось в ответ thebwt , это проблема пути.Рабочий каталог для вашей среды django не будет каталогом вашего приложения, поэтому вы не можете найти ваш файл.

Вам нужно будет указать либо полный путь к вашему rrd-файлу (не идеально), либо относительный путьв рабочий каталог.

В качестве альтернативы, обычная хитрость для решения таких проблем - извлечь каталог, в котором находится конкретный модуль python (используя __file__), и использовать его для перевода путей (относительнотекущий файл) к абсолютному пути.Например:

FILE_DIR = os.path.realpath(os.path.dirname(__file__))
rel_to_abs = lambda *x: os.path.join(FILE_DIR, *x)

В вашем случае:

# in view.py
import os
import rrdtools
FILE_DIR = os.path.realpath(os.path.dirname(__file__))
rel_to_abs = lambda *x: os.path.join(FILE_DIR, *x)

def hello(request):
    info = rrdtool.info(rel_to_abs('usage.rrd'))
    return HttpResponse(info)

ps, вы могли видеть, что этот метод используется в settings.py для указания путей к sqlite3 DATABASE_NAME, MEDIA_ROOTи т. д., чтобы абсолютный путь был получен во время выполнения, а не был жестко закодирован.

...