在我的settings.py文件中,STATIC_ROOT
和MEDIA_ROOT
都指向硬编码位置。例如,STATIC_ROOT
路径为:
/home/ian/projectname/mysite/appname/static
我知道在部署项目时会出现问题。
环顾四周我可以看到我需要使用os.path
,但无数的例子让我感到困惑。
我试图查看设置此文件的不同排列(或获取用于设置BASE_DIR的示例值)但是因为屏幕截图显示我遗漏了某些东西,因为它抱怨文件价值。
如果需要,我正在使用Django 1.6
提前致谢。
答案 0 :(得分:5)
首先,由于在交互式shell中附加__file__
,您收到此错误:
NameError: name '__file__' is not defined
shell无法检测到__file__
中的当前文件路径,因为它与您添加此行的filepath
相关。例如,要使用,您需要在file.py
:
os.path.join(os.path.dirname(__file__))
然后,从命令行运行:
python file.py
这是因为__file__
与filepath
的{{1}}有关。
在file.py
的情况下,使用它来获取Django项目的根目录:
settings.py
然后,您可以使用BASE_DIR = os.path.dirname(os.path.dirname(__file__))
加入其他相对路径,例如:
os.path.join()
有关如何布置Django项目目录的更多信息,请阅读:Common structures
答案 1 :(得分:3)
通常的做法(也在django official tutorial中建议)是设置BASE_DIR
设置,从__file__
获取当前工作目录:
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
然后,使用os.path.join()
构建其他相对路径,例如:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
请注意__file__
仅适用于模块,在控制台上使用它没有意义。