2011-06-11 8 views
10

A veces deseo ejecutar un archivo en el contexto de mi proyecto Django, como si estuviera usando el shell, pero con la comodidad de usar un editor de texto. Esto es principalmente para probar algo o prototipar rápidamente alguna funcionalidad antes de ponerla en una vista, prueba, tarea recurrente o comando de administración.¿Cómo ejecuto un script arbitrario en el contexto de mi proyecto Django?

Sé que puedo pegar estas líneas en la parte superior de mi archivo .py y se quedará en el contexto de Django:

import sys 
sys.path.append('/location/of/projet') 
from django.core.management import setup_environ 
import settings 
setup_environ(settings) 

pensé que sería más fácil para que un comando de gestión que se lleva en el argumento, un módulo de Python para ejecutar, y lo ejecuta en el entorno de Django. Aquí está el comando 'runmodule' escribí:

from django.core.management.base import BaseCommand, CommandError 

class Command(BaseCommand): 
    help = "Runs an arbitrary module, in the Django environment, for quick prototyping of code that's too big for the shell." 

    def handle(self, *args, **options): 
     if not args: 
      return 
     module_name = args[0] 

     try: 
      __import__(module_name) 
     except ImportError: 
      print("Unable to import module %s. Check that is within Django's PYTHONPATH" % (module_name)) 

Esto parece que funciona - puedo pegar un código en un módulo, y pasarlo como argumento de este comando, y va a se ejecutan, por ejemplo,

python manage.py runmodule myapp.trysomethingout 

que ejecutará myapp/trysomethingout.py. ¿Es ésta la mejor manera de hacer ésto?

Respuesta

9

La mejor manera de ejecutar un script con el contexto de django correcto es establecer la variable de entorno DJANGO_SETTINGS_MODULE en su módulo de configuración (y PYTHONPATH apropiado si es necesario). En las ventanas, esto generalmente significa la ejecución:

set DJANGO_SETTINGS_MODULE=setting 

y en bash:

export DJANGO_SETTINGS_MODULE=setting 

Ahora puede importar sus modelos etc.

véase: https://docs.djangoproject.com/en/dev/topics/settings/#designating-the-settings.

Tenga en cuenta que para importar el módulo settings, uno debe usar from django.conf import settings. Esto tiene en cuenta el DJANGO_SETTINGS_MODULE en lugar de usar automáticamente settings.py.

+1

puedes ponerlo directamente en tu script de python en tu if __name__ == "__main__": con esta línea: os.environ.setdefault ("DJANGO_SETTINGS_MODULE", "settings") – OriolJ

Cuestiones relacionadas