Utilisation de modèles Django en script python externe
J'étais très confus aujourd'hui.
J'ai essayé d'utiliser mon django app modèles dans mon script python.
voici ma démarche
import os, sys
sys.path.append("/var/www/cloudloon/horizon")
os.environ["DJANGO_SETTINGS_MODULE"] = "openstack_dashboard.settings"
from django.contrib.auth.models import User
J'ai été confondu pourquoi sa me donne
ImportError: Could not import settings 'openstack_dashboard.settings' (Is it on sys.path?): cannot import name auth
Moment de l'enregistrement, j'ai créé un fichier appelé creds qui comprend
export PYTHONPATH=$PYTHONPATH:/var/www/cloudloon/horizon/;
export DJANGO_SETTINGS_MODULE=openstack_dashboard.settings; django-admin.py shell;
et à partir de la fenêtre du terminal où creds le fichier se trouve, je ne
source creds
et à partir de ce django-admin.py shell, j'ai pu importer mes django app modèles sans erreurs.
Pourquoi il ne fonctionne pas dans mon script python?
Je suis fait avec Django, Ce que je dois faire est de créer un python-démon script qui va accéder à mon django app modèles.
Je travaille avec Ubuntu 12.04 qui a django 1.5
Que je cherche des solutions, je l'ai fait:
import os, sys
sys.path.append("/var/www/cloudloon/horizon")
sys.path.append("/var/www/cloudloon/horizon/openstack_dashboard")
# os.environ["DJANGO_SETTINGS_MODULE"] = "settings"
os.environ.setdefault("DJANGO_SETTINGS_MODULE",
"openstack_dashboard.settings")
print os.environ["DJANGO_SETTINGS_MODULE"]
for s in sys.path:
print s
from django.contrib.auth.models import User
heres la sortie: http://paste.openstack.org/show/48787/
comme vous pouvez le voir, le répertoire où settings.py est situé sont présents sur mon sys.chemin, cependant, Il était encore impossible d'importer des openstack_dashboard.les paramètres.
Merci à tous.
source d'informationauteur Django Bot
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'écrire un gestion personnalisée de commandeau lieu de faire ces étranges acrobaties.
Créer un module appelé de gestion (en d'autres termes, créer un répertoire
management
et à l'intérieur c'est de créer un vide__init__.py
de fichiers) dans le répertoire de n'importe quelle application que vous avez énumérés dansINSTALLED_APPS
. Donc, si vous avezmyapp
vous pouvez créer:Ensuite dans le répertoire de gestion, de créer un autre module
commands
et dans la création d'un fichier qui est le nom de votre commande; par exemplemy_command.py
comme ceci:Dans
my_command.py
écrire ce code réutilisable:Une fois que vous enregistrez le fichier, vous serez en mesure de faire
python manage.py my_command
et il aura accès à l'ensemble de vos modèles et de paramètres.Si vous devez l'exécuter en tant que démon, Daniel Roseman a écrit
django-initd
qui fait exactement cela. Une fois que vous l'avez installé:Une fois que vous avez fait à partir de l'github readme:
Ci-dessous script doit fonctionner à condition que la mise en page de votre projet (et le chemin d'accès à votre fichier de paramètres) ressemble à ceci:
Je crois que le problème que vous voyez n'est due à l'arrangement de votre projet, ou que vous avez besoin d'ajouter un autre niveau de répertoire à la
sys.path
appeler dans le script.Edit:
Regardant votre projet github,
horizon
etopenstack_dashboard
sont sur le même niveau de répertoire. Ce que vous voulez faire est de mettre votresys.path
à un niveau supérieur: