子文件夹中的BASE_DIR输出,DJANGO

时间:2016-04-24 13:00:47

标签: python django

自从我将settings.py文件更改为子文件夹设置中的3个不同文件(即基本,本地和制作)后,BASE_DIR将不会显示路径正确投射。

我希望BASE_DIR输出的内容如下:

`PathToProject/Projectname`

我得到了什么(因为我在base.py中移动了BASE_DIR'设置'子文件夹:

PathToProject/Projectname/Projectname

让我感到困扰,因为它现在正在static而不是Projectname/Projectname中寻找Projectname文件夹

我如何正确配置BASE_DIR函数以给我正确的项目路径?

1 个答案:

答案 0 :(得分:3)

关于拥有多个自定义settings.py文件:

我建议您保留默认主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

BASE_DIR(应该)如何工作:

创建项目时,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怎么办?”

如果您移动settings.py文件,则可能需要更改BASE_DIR值:例如,如果您将其移动得更深,只需在BASE_DIR分配中添加os.path.dirname即可

NB:如果你想选择在几个子项目中运行的项目(虽然我觉得很奇怪,但我不确定我是否理解。它可能是错的,随意描述您想要实现的目标以及为什么,或许我们可以建议更好的方式),您仍然可以覆盖自定义BASE_DIR文件中的BASE_DIR值。