0

在我的 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”:没有这样的文件或目录

尽管在当前目录中。

4

2 回答 2

1

应用程序从项目的根目录开始。所以你需要修复你的路径, ('app-name/usage.rrd') 。

于 2011-03-02T15:00:30.170 回答
0

正如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指定 sqlite3DATABASE_NAMEMEDIA_ROOT的路径,这样绝对路径是在运行时获得的,而不是被硬编码的。

于 2011-03-02T16:06:24.227 回答