2009-12-02 6 views
11

Quando eseguo shell manage.py sul mio progetto Django per dare un'occhiata a qualcosa ci sono importazioni comuni che voglio sempre eseguire all'inizio della shell (ad es. Voglio sempre importare i miei file di modello). Come posso sono eseguiti automaticamente ogni volta che eseguo il comando shell?Come si precaricano le importazioni nel comando manage.py della shell di Django?

Seconda domanda correlata, quando premo la freccia su Ho il carattere "^ A" invece del comando eseguito in precedenza nella shell manage.py (e nella mia normale shell python), come posso risolvere questo in modo che carica il comando precedente come nella riga di comando di Linux/Unix?

risposta

10

Per la prima domanda, consultare il comando manage.py shell_plus fornito dal progetto django-extensions. Caricherà tutti i file del modello all'avvio della shell. Il progetto ha anche un sacco di altri trucchi utili, quindi vale sicuramente la pena di provarlo.

Per la seconda domanda, posso solo supporre che sia necessario installare readline.

2

Una singola cosa che può risolvere entrambi i problemi è ipython. ipython memorizza le esecuzioni precedenti e può darti anche il completamento.

+0

storia risparmio non risolve il primo problema quando sei co in pratica eseguendo una nuova istanza (ad esempio, heroku), mentre lo fa shell_plus. –

0

L'aggiunta di elementi aggiuntivi alla shell di django può essere eseguita utilizzando come punto di partenza il comando shell_plus fornito nell'app django-extesions e modificandolo aggiungendo quello che si desidera rendere disponibile al dizionario 'imported_objects'.

Ad esempio, se si duplica il file shell_plus.py e aggiungere queste due righe alla fine:

# ....... 
alist = range(1000) 
imported_objects['alist'] = alist 
code.interact(local=imported_objects) # <-- this is the original final line 

Quando si esegue la shell utilizzando il nuovo file il seguente riferimento 'alist' sarà disponibile. Ho messo un esempio più qui: http://www.michelepasin.org/techblog/?p=1012

3

si può replicare quello

python manage.py shell 

fa da solo facendo:

from django.core.management import setup_environ 
from mysite import settings 
setup_environ(settings) 

e si avrà l'ambiente tutti insieme per il resto della script. Ci sono alcuni altri modi per farlo anche qui: http://www.b-list.org/weblog/2007/sep/22/standalone-django-scripts/

+0

Nel mio caso, "ImportError: impossibile importare il nome" setup_environ "mi viene mostrato – LKM

1

Auto importazione di pacchetti di uso frequente in python manage.py shell_plus

Esempio:

# local_settings 
SHELL_PLUS_PRE_IMPORTS = (
    ('<app_name>.models', '*'), 
    ('<app_name>.forms', '*'), 
    ('<app_name>.views', '*'), 
    ('django.core.urlresolvers', '*'), 
    ('django.db', 'connection'), 
    ('django.db', 'reset_queries'), 
) 

SHELL_PLUS_DONT_LOAD = ['<app_name>', '<app_name>'] 

Riferimento:
https://github.com/django-extensions/django-extensions/blob/master/docs/shell_plus.rst

+1

Grandi informazioni, grazie! – nehemiah

Problemi correlati