簡體   English   中英

settings.py中的命名空間問題

[英]Namespaces issue in settings.py

我正在嘗試自定義如何將應用程序集成到通用Django項目中。 問題在於如何將應用程序設置文件導入項目settings.py中,以便使應用程序特定設置與Django的設置完全分開。 例如:

settings.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詞典反映了應用程序所做的更改。 但是,如果應用程序想要向外部名稱空間添加名稱怎么辦? 添加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上下文,因為我也很欣賞實現拆分設置目標的不同解決方案。

這是其中一種情況,其中主settings文件中的execfile('settings_myapp.py')實際上可能是一個好主意,因為您真正想做的是在當前上下文中運行一些代碼。

只需從settings_myapp.py取出import ,它就可以正常工作。

編輯:想添加execfile()已從Python 3中刪除; 使用exec(open(fn).read())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM