utilizando perfis em ipython e Django
Pergunta
Eu tenho um produto Django Estou usando ipython para interagir com.
Eu estou tentando ter módulos carregados automaticamente quando eu iniciar um shell:
python shell manage.py
Copiei .ipython / ipythonrc para o diretório raiz do projeto e adicionado ao arquivo:
import_some module_name model1 model2
No entanto, quando eu iniciar o shell, esses nomes não estão sendo carregados.
O que estou fazendo de errado?
Solução
Eu não sei sobre ipythonrc, mas se você só precisa de modelos, você pode usar django-extensions
. Depois de instalá-lo, você tem uma infinidade de novos comandos gestão, incluindo shell_plus
, que abrirá uma sessão ipython e autoLoad todos os seus modelos:
python manage.py shell_plus
Outras dicas
BryanWheelock Sua solução não vai funcionar porque o seu shell é o resultado da desova não um interatction direto com ele. O que você quer fazer é isso -. Ou pelo menos isso é o que eu faço
Dentro de sua área de trabalho (o lugar onde você digita python manage.py shell
) criar um arquivo ipythonrc. Nele coloque o seguinte:
include ~/.ipython/ipythonrc
execute from django.contrib.auth.models import User
# .
# .
# .
execute import_some module_name model1 model2
Por exemplo, eu também adicionar as seguintes linhas no meu ..
# Setup Logging
execute import sys
execute import logging
execute loglevel = logging.DEBUG
execute logging.basicConfig(format="%(levelname)-8s %(asctime)s %(name)s %(message)s", datefmt='%m/%d/%y %H:%M:%S', stream=sys.stdout )
execute log = logging.getLogger("")
execute log.setLevel(loglevel)
execute log.debug("Logging has been initialized from ipythonrc")
execute log.debug("Root Logger has been established - use \"log.LEVEL(MSG)\"")
execute log.setLevel(loglevel)
execute log.debug("log.setlevel(logging.DEBUG)")
execute print ""
Isso permite que você usar o log em seus módulos e mantê-lo seco. Espero que isso ajude.
comando shell_plus
de django-extensões pode importar o modelo automaticamente, mas parece que não pode carregar o perfil de ipython. Eu fiz algum trabalho hacky para fazer este feito.
uso start_ipython
para lançar ipython desembolsar em vez de embed
e passar alguns argumentos a ele.
Eu também escreveu um post no blog, você pode encontrar o detalhe aqui