124 votes

Comment recharger les modules dans le shell de django ?

Je travaille avec Django et j'utilise le shell Django en permanence. L'ennui, c'est que le serveur Django se recharge en cas de modification du code, mais pas le shell. Ainsi, chaque fois que je modifie une méthode que je teste, je dois quitter le shell et le redémarrer, réimporter tous les modules dont j'ai besoin, réinitialiser toutes les variables dont j'ai besoin, etc. Bien que l'histoire d'iPython m'évite de taper beaucoup de choses à ce sujet, cela reste pénible. Existe-t-il un moyen de faire en sorte que le shell de django se recharge automatiquement, de la même manière que le serveur de développement de django ?

Je connais reload(), mais j'importe beaucoup de modèles et j'utilise généralement from app.models import * donc reload() n'est pas d'une grande aide.

2 votes

Vous devriez mettre à jour cette question pour marquer la réponse "django-extensions" comme correcte.

1 votes

Pas tant que ça ne fonctionne pas pour moi. J'ai installé les extensions, mais aucun de mes codes ne se recharge automatiquement et je ne vois aucune mention du rechargement automatique dans la documentation de shell_plus. Il semble qu'il y ait un reloader dans la commande runserver_plus, mais ce n'est pas ce que je recherche.

46voto

mpaf Points 650

Je recommande d'utiliser le projet django-extensions comme indiqué ci-dessus par dongweiming. Mais au lieu de la commande de gestion 'shell_plus', utilisez :

manage.py shell_plus --notebook

Cela ouvrira un carnet de notes IPython sur votre navigateur web. Écrivez-y votre code dans une cellule, vos importations, etc. et exécutez-le.

Lorsque vous changez vos modules, il suffit de cliquer sur l'élément de menu du bloc-notes "Kernel->Restart".

Voilà, votre code utilise maintenant vos modules modifiés.

43 votes

"Utilisez simplement un carnet de notes python" n'est pas une réponse à la question de l'OP.

1 votes

Cette méthode, bien qu'elle ne soit pas automatique comme %autoreload, fonctionne de manière plus fiable qu'autoreload. kernel restart garantit que toutes les cellules du bloc-notes obtiennent des modules entièrement rechargés. De plus, vous pouvez redémarrer et exécuter toutes les cellules si vous le souhaitez.

33voto

dongweiming Points 381

Regardez la commande shell_plus manage.py fournie par l'application django-extensions projet. Il chargera tous vos fichiers de modèle au démarrage du shell. et autorechargera vos modifications, mais vous n'avez pas besoin de sortir, vous pouvez appeler directement ici.

42 votes

J'utilise shell_plus et mes modèles ne se rechargent pas automatiquement, est-ce que je rate quelque chose ?

38 votes

Shell_plus ne recharge pas les modèles, ce qui ne répond donc pas à la question.

5 votes

Comme indiqué, shell_plus ne recharge pas les modèles.

26voto

Mad Wombat Points 1133

Il semble que le consensus général sur ce sujet, est que python reload() craint et qu'il n'y a pas de bon moyen de le faire.

0 votes

Mauvaise réponse. La réponse de @dongweiming ci-dessus est la solution, et devrait être acceptée comme la meilleure réponse.

3 votes

De nombreux commentaires sur sa réponse indiquent que shell_plus ne recharge pas les modèles.

1 votes

Je viens de le tester moi-même et il ne se recharge pas. De plus, qu'en est-il du code non-modèle que j'importe à la main ?

4voto

Tomasz Zielinski Points 9300

Reload() ne fonctionne pas dans le shell Django sans quelques astuces. Vous pouvez consulter ce fil de discussion et ma réponse en particulier :

Comment recharger un module de modèle Django en utilisant l'interpréteur interactif via "manage.py shell" ?

1voto

littlegreen Points 3688

Au lieu d'exécuter des commandes à partir du shell de Django, vous pouvez mettre en place une commande de gestion comme ça et refaire ça à chaque fois.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X