我正在啓動一個Django 1.10項目,並且想要分割設置文件。我對任何現有的解決方案都不滿意。在分割Django設置文件時臨時修改`builtins`
- 我不希望能夠覆蓋在另一個從一個文件
string
/boolean
/dict
設置。每個string
/boolean
/dict
設置應該只設置在一個地方。這可以很容易地跟蹤事物的定義。 我不想手動擴展
tuple
/list
設置,例如,INSTALLED_APPS += (test_app)
。這看起來很亂,需要我跟蹤是否在其他文件中使用了列表或元組。我不想在
import os
和多個文件中定義BASE_DIR
。幹。
我的解決方案,已經看了許多人一樣,是用含有local_settings.py
,common_settings.py
和__init__.py
一個目錄替換settings.py
。
在__init__.py
,I import os
和計算BASE_DIR
。然後我
import builtins
builtins.BASE_DIR = BASE_DIR
builtins.os = os
from .common_settings import *
from . import local_settings
# At this point both modules have run and we no longer need to be messing
# with the builtins namespace.
del builtins.BASE_DIR
del builtins.os
del builtins
我然後遍歷dir(local_settings)
和惹globals()
實現了前兩個要求(我可以張貼整個事情,如果提出要求,但我很感興趣,我使用的builtins
)。
這種使用builtins
太邪惡了嗎?什麼可以打破它。顯然,如果任一標識符與builtins
的更高版本的屬性衝突,那麼這段代碼將會破壞python。如果使用這些標識符中的任何一個的函數結束在其中一個設置文件中,並且稍後調用它,則會中斷。
雖然我沒有看到這兩種情況。有沒有我沒有看到的潛在問題?