5

在我的 settings.py 文件中STATIC_ROOTMEDIA_ROOT两者当前都指向硬编码位置。例如STATIC_ROOT路径是:

/home/ian/projectname/mysite/appname/static

我知道这会在我部署项目时引起问题。

环顾四周,我可以看到我需要使用,os.path但无数的例子让我感到困惑。

我试图查看设置此文件(或获取用于设置 BASE_DIR 的示例值)的不同排列,但是由于屏幕截图显示我缺少某些内容,因为它抱怨文件值。

如有需要,我使用 Django 1.6

提前致谢。

在此处输入图像描述

4

2 回答 2

5

首先,由于附加了__file__交互式 shell,您会收到此错误:

NameError: name '__file__' is not defined

shell 不会检测到当前文件路径,__file__因为它与filepath您添加此行的位置有关。例如,要工作,您需要将其包含在file.py

os.path.join(os.path.dirname(__file__))

然后,从命令行运行它:

python file.py

这是因为__file__filepathoffile.py是什么有关。

在 的情况下settings.py,使用它来获取 Django 项目的根目录:

BASE_DIR = os.path.dirname(os.path.dirname(__file__))

然后您可以使用os.path.join()加入其他相对路径,例如:

STATIC_ROOT = os.path.join(BASE_DIR, 'static')
TEMPLATE_DIRS = os.path.join(BASE_DIR, 'templates')

有关如何布置 Django 项目目录的更多信息,请阅读:通用结构

于 2014-07-20T21:33:50.650 回答
3

通常的做法(在django 官方教程中也建议)是有一个从以下位置BASE_DIR获取当前工作目录的设置__file__

BASE_DIR = os.path.dirname(os.path.abspath(__file__))

然后,使用os.path.join()其他的相对路径来构造,例如:

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

请注意,__file__仅适用于模块,在控制台上使用它没有意义。

于 2014-07-20T20:55:12.587 回答