2011-08-18 7 views
1

Je veux lancer un script python qui devrait faire:script Python pour exécuter Django commandes

  1. Créer un projet django: django-admin startproject foobar
  2. Créer une application dans le projet: python manage.py barfoo
  3. Ajouter une entrée de application nouvellement créée barfoo dans le paramètre INSTALLED_APP.

Comment puis-je y parvenir?

Répondre

2

Lecture d'un petit sous-processus et d'une méthode Popen. Cela pourrait être ce que vous cherchez.

  1. Popen(["django-admin", "startproject", "%s" % your_name ], stdout=PIPE).communicate()

  2. Popen(["python", "manage.py", "%s" % your_app_name ], stdout=PIPE).communicate()

3. Je sais que ce n'est pas un code parfait, mais je suis juste donner une idée.

with open("settings.py", 'r') as file: 
    settings = file.readlines() 

new_settings = [] 
for line in settings: 
    if "INSTALLED APPS" in line: 
     new_settings.append(line.replace("INSTALLED_APPS = (", "INSTALLED_APPS = (\n'%s'," % your_app_name)) 
    else: 
     new_settings.append(line) 
with open("settings.py", 'w') as file: 
    file.write("".join(new_settings)) 
+0

_Maybe_ pour # 1, mais pas pour # 2 ou # 3. Ceux-ci sont facilement réalisables en Python. – agf

+0

Je l'édite en ce moment. – Gandi

+0

Très bien amélioré :). – agf

0

6 ans plus tard je suis tombé sur cette question à essayer de comprendre comment écrire des tests pour une application qui n'ajoute qu'un tag de modèle personnalisé qui interagit avec d'autres applications du projet. J'espère que cela peut aider quelqu'un.

S'appuyant sur @groovehunter réponse: le official documentation maintenant (Django 1.10) inculdes cette fonctionnalité en dehors dev.

Notez que vous devez modifier le répertoire en cours pour le projet créé avant d'appeler startapp. Voir this answer pour plus de détails

from django.core import management 
import os 

management.call_command('startproject', 'foobar') 
os.chdir('foobar') 
management.call_command('startapp', 'barfoo') 

ou vous pouvez utiliser le argumento supplémentaire pour startproject pour créer le projet dans le répertoire courant, si vous êtes sûr qu'il n'y aura pas de problèmes:

from django.core import management 

management.call_command('startproject', 'foobar', '.') 
management.call_command('startapp', 'barfoo') 
Questions connexes