自从我将settings.py
文件更改为子文件夹设置中的3个不同文件(即基本,本地和制作)后,BASE_DIR
将不会显示路径正确投射。
我希望BASE_DIR输出的内容如下:
`PathToProject/Projectname`
我得到了什么(因为我在base.py中移动了BASE_DIR'设置'子文件夹:
PathToProject/Projectname/Projectname
让我感到困扰,因为它现在正在static
而不是Projectname/Projectname
中寻找Projectname
文件夹
我如何正确配置BASE_DIR函数以给我正确的项目路径?
答案 0 :(得分:3)
我建议您保留默认主settings.py
,如果需要,可以将自定义主文件放在一边。
如果您需要派生它,请为您的预生产版本制作其他settings.py
文件。在preprod-settings.py
:
settings.py
设为这样
from .settings import *
DEBUG = False # <-- just add some settings or override the previous ones like this.
这样,所有主要设置都在主文件中,您只需要在自定义设置文件中放置要更改的内容。然后,您就可以使用manage.py
的{{1}}选项更改要使用的设置文件,或者在生产中修改(或制作自定义的)--settings
文件,以便实例:
wsgi.py
创建项目时,import os, sys
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.mycustomsettingsfile")
SETTINGS_DIR = os.path.dirname(__file__)
PROJECT_PATH = os.path.abspath(os.path.join(SETTINGS_DIR, os.pardir))
sys.path.append(PROJECT_PATH)
application = get_wsgi_application()
的默认值为:
BASE_DIR
表示:
“BASE_DIR是此行所在文件的父文件夹的父文件夹(settings.py)。”。
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
给出父文件夹路径,os.path.dirname()
给出绝对路径(你需要它给os.path.abspath()
足够的信息来获取父目录名。)
由于每次运行服务器时都会计算os.path.dirname()
的值,并且由于此值仅取决于BASE_DIR
位置,因此您不需要针对多个位置或案例的自定义值:< / p>
您移动项目 - &gt; settings.py
会自动更改。
如果您移动settings.py文件,则可能需要更改BASE_DIR
值:例如,如果您将其移动得更深,只需在BASE_DIR
分配中添加os.path.dirname
即可
NB:如果你想选择在几个子项目中运行的项目(虽然我觉得很奇怪,但我不确定我是否理解。它可能是错的,随意描述您想要实现的目标以及为什么,或许我们可以建议更好的方式),您仍然可以覆盖自定义BASE_DIR
文件中的BASE_DIR
值。