2010-03-25 8 views
6

Quelqu'un pourrait-il me donner un pointeur sur la raison pour laquelle j'ai besoin d'ajouter le chemin racine du projet au chemin python ainsi que l'application elle-même dans mon fichier WSGI?Django sys.path.append pour les projets * et * requis sous WSGI

La base du projet s'appelle 'djapp', l'application s'appelle 'myapp'.

sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..') 
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../djapp') 

os.environ['DJANGO_SETTINGS_MODULE'] = 'djapp.settings' 

Si je laisse de côté la ligne avec « /../djapp/ » le journal dit que mon « myapp » ne peut pas être importé, même si « djapp.settings » est. (la validation de 'djapp' a été importée)

Elle fonctionne correctement avec la commande ./manage.py. il y a un __init__ dans le dossier du projet.

Pour l'amour de testings, je vois le même problème en utilisant addsitedir:

site.addsitedir('/home/user/web/project/') 
site.addsitedir('/home/user/web/project/djapp') 

Répondre

4

Depuis djapp (le dossier du projet de django) est dans un dossier parent qui appartient également au déploiement, je renommé le dossier djapp simplement project. Ensuite, ce code est toujours correct:

sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..') 
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../project') 

os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings' 

La mise en page du dossier complet étant:

host.example.com\ 
    etc\ 
    bin\ 
    project\ 
    logs\ 

Et ce que vous avez. De cette façon, le projet peut toujours être appelé projet :)

Espérons que ça aide.

GrtzG

3

Je suppose que vous avez le code obtenu dans votre projet qui est en train de faire from myapp import foo.

Deux options:

  • changement à from djapp.myapp import foo, qui n'est pas recommandée car elle empêche la portabilité;
  • Ajoutez uniquement djapp dans votre WSGI et définissez DJANGO_SETTINGS_MODULE sur 'settings'.
+0

Salut Daniel, merci pour vos commentaires. Déjà essayé la 2ème option, mais il se plaint de l'importation de 'djapp.urls' – GerardJP

Questions connexes