J'essaie de personnaliser l'intégration des applications dans un projet Django générique. La question est de savoir comment les fichiers de configuration des applications peuvent être importés dans le projet settings.py, afin de garder les paramètres spécifiques de l'application bien séparés de ceux de Django. Par exemple:Problème d'espaces de noms dans settings.py
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'
}
Jusqu'à présent, si bon. Lors de l'exécution dans les paramètres Django, le dictionnaire DATABASE reflète les modifications apportées par l'application. Mais que faire si l'application veut ajouter un nouveau nom dans l'espace de nom externe? Ajout NEW_SETTING = True
dans myapp_settings
et deux déclarations d'impression à la fin de settings.py
, je reçois ceci:
$ 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
Comment puis-je éviter l'importation circulaire et obtenir la chose faite?
Je pense qu'il me manque un concept de base de Python ici, j'ai donné le contexte de Django de toute façon parce que j'apprécierais aussi différentes solutions pour atteindre la cible des paramètres séparés.
+1 Votre solution a pour effet de fusionner les espaces de noms, résolvant parfaitement le problème que j'ai proposé. – Paolo