Django 设置:如何从应用程序中的设置文件夹访问变量

Mic*_*rce 4 django django-apps django-settings

我有一个具有以下结构的 djanog 项目:

--|src
  --project
  --|settings
     --__init__.py
     --production.py
     --local.py
  --|app1
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中,我导入了设置 ( from django.conf import settings),然后在我按照教程进行操作时,他们说要这样做getattr(settings, VARIABLE)。那对我不起作用。相反,我可以这样做:settings.VARIABLE。有什么不同?

哦,我跑了type(settings),它输出了<class 'django.conf.LazySettings'>.

Bur*_*lid 6

不同之处在于,由于各种原因(详细信息请参阅文档),除非从中引用了设置对象,否则不会加载设置对象。

LazySettings对象很特殊,您必须使用 来访问它settings.SOMETHING

它被称为“Lazy”的原因是因为当您导入它时,整个对象并未加载并可供您使用。该LazySettings对象的作用类似于实际设置对象的代理。

  • 这回答了问题。 (3认同)

Moh*_*Ali 5

为了访问 settings.py 文件中的变量,您可以这样做:

例如,我在 settings.py 文件中定义了 STATIC_ROOT 变量,如下所示:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static', 'static_root')
Run Code Online (Sandbox Code Playgroud)

我可以像这样访问这个变量:

from django.conf import settings
document_root=settings.STATIC_ROOT
Run Code Online (Sandbox Code Playgroud)

  • 我不明白这是如何被接受的答案。你只是证实了他在问题中所说的话,并没有解释为什么不同! (3认同)