gpt4 book ai didi

python - settings.py 中的命名空间问题

转载 作者:行者123 更新时间:2023-12-04 17:04:48 25 4
gpt4 key购买 nike

我正在尝试自定义应用程序如何集成到通用 Django 项目中。问题是关于如何将应用程序设置文件导入到项目 settings.py 中,以便将应用程序特定设置与 Django 的设置很好地分开。例如:

设置.py

# Django configuration settings...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'cms'
}
# a bunch of other settings

# apps overridings and new settings
from settings_myapp import *

settings_myapp.py
from settings import DATABASES

DATABASES['cms'] = {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'cms'
}

到现在为止还挺好。在 Django 设置中的运行时,DATABASE 字典反射(reflect)了应用程序所做的更改。但是如果应用程序想要在外部命名空间中添加一个新名称怎么办?添加 NEW_SETTING = Truemyapp_settings以及 settings.py 末尾的几个打印语句,我明白了:
$ python settings.py 
{'default': {'ENGINE': 'django.db.backends.sqlite3', 'NAME': 'default'}}
Traceback (most recent call last):
File "settings.py", line 8, in <module>
from settings_myapp import *
File "~/settings_myapp.py", line 1, in <module>
from settings import DATABASES
File "~/settings.py", line 10, in <module>
print NEW_SETTING
NameError: name 'NEW_SETTING' is not defined

如何避免循环导入并完成任务?

我想我在这里缺少一些基本的 Python 概念,无论如何我给出了 Django 上下文,因为我也很欣赏不同的解决方案来达到拆分设置目标。

最佳答案

这是其中一种情况 execfile('settings_myapp.py')在主 settings file 实际上可能是一个好主意,因为您真正想做的是在当前上下文中运行一些代码。

只需取出import来自 settings_myapp.py它应该可以正常工作。

编辑:想添加 execfile()已从 Python 3 中删除;使用 exec(open(fn).read()) .

关于python - settings.py 中的命名空间问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6931642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com