background
J'essaie de diviser mes paramètres par environnement en suivant these instructions.Module de paramètres Django non trouvé
Maintenant, je voudrais simplement exécuter ma commande de test comme ceci:
./run ./manage.py test --settings=bx.settings.local
actuellement la ligne suivante
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bx.settings")
est disponible dans ces fichiers
manage.py
wsgi.py
et je supprimé (car il est censé être lu à partir de la ligne de commande à la place).
J'ai aussi créé un dossier settings
dans mon application et bx
ajouté les fichiers
__init__.py
base.py
local.py
à elle.
notes
Note: le fichier run
est la suivante:
#!/usr/bin/env bash
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
docker run \
--env "PATH=/beneple/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" \
--link beneple_db:db \
-v $DIR:/beneple \
-t -i --rm \
beneple/beneple \
[email protected]
problème
quand je lance la commande
./run ./manage.py test --settings=bx.settings.local
Je reçois cette erreur
File "/beneple/bx/org/serializers.py", line 10, in <module>
from bx.settings import DOMAIN
ImportError: cannot import name DOMAIN
à serializers.py:10, nous avons obtenu cette
from bx.settings import DOMAIN
donc je remplacé bx.settings
avec
from django.conf import settings
from settings import DOMAIN
et à la place que j'ai eu cette erreur :
File "/beneple/bx/org/serializers.py", line 12, in <module>
from settings import DOMAIN
ImportError: No module named settings
débogage
la partie étrange est que si je mets un point d'arrêt après from django.conf import settings
et tapez:
ipdb> print(settings)
<Settings "bx.settings.local">
ipdb> settings.DOMAIN
'http://localhost:8000'
Je suis confus pourquoi il ne reconnaît pas les paramètres ici en tant que module?
mise à jour
J'ai remarqué que mon répertoire de modèles changé.Dans mes fichier de paramètres que j'ai
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
..
TEMPLATES = [{
'DIRS': [os.path.join(BASE_DIR, 'templates')],..
remarquer cependant la différence de la valeur de settings.TEMPLATES[0]['DIRS']
entre l'ancienne et nouvelle façon:
ancienne:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bx.settings")
['/beneple/templates']
nouvelle façon :
./run ./manage.py test --settings=bx.settings.local
['/beneple/bx/templates']
pourquoi est-ce le cas? et comment puis-je (par programmation) rendre la nouvelle manière sortie le même résultat que l'ancien?
Vous ne pas importer les paramètres directement, mais leur accès comme celui-ci de 'Settings' import django.conf puis' settings.DOMAIN'. –