{"title":"Comment personnaliser la commande shell","version":"5.2","locale":"fr","docname":"howto/custom-shell","url":"/fr/5.2/howto/custom-shell/","canonical":"https://djangodocs.dev/fr/5.2/howto/custom-shell/","summary":"Le shell Django est un environnement Python interactif donnant accès aux modèles et aux réglages, ce qui en fait un outil important pour tester du code,…","html":"<h1>Comment personnaliser la commande <code class=\"docutils literal notranslate\"><span class=\"pre\">shell</span></code><a class=\"heading-anchor\" href=\"#how-to-customize-the-shell-command\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Le <a class=\"reference internal\" href=\"/fr/5.2/ref/django-admin/#django-admin-shell\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">shell</span></code></a> Django est un environnement Python interactif donnant accès aux modèles et aux réglages, ce qui en fait un outil important pour tester du code, expérimenter avec des requêtes ou pour interagir avec les données d’une application.</p>\n<p>La personnalisation de la commande <a class=\"reference internal\" href=\"/fr/5.2/ref/django-admin/#django-admin-shell\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">shell</span></code></a> permet d’ajouter des fonctionnalités supplémentaires ou de précharger des modules spécifiques. Pour cela, créez une nouvelle commande d’administration héritant de <code class=\"docutils literal notranslate\"><span class=\"pre\">django.core.management.commands.shell.Command</span></code> et surchargez la commande <code class=\"docutils literal notranslate\"><span class=\"pre\">shell</span></code> existante. Pour plus de détails, référez-vous au guide sur la <a class=\"reference internal\" href=\"/fr/5.2/howto/custom-management-commands/#overriding-commands\"><span class=\"std std-ref\">surcharge des commandes</span></a>.</p>\n<section id=\"customize-automatic-imports\">\n<span id=\"customizing-shell-auto-imports\"></span><h2>Personnalisation des importations automatiques<a class=\"heading-anchor\" href=\"#customize-automatic-imports\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<aside class=\"version-note version-added\" data-version=\"5.2\">\n<p class=\"version-note-title\">New in Django 5.2</p></aside>\n<p>Pour personnaliser le comportement d’importation automatique de la commande d’administration <a class=\"reference internal\" href=\"/fr/5.2/ref/django-admin/#django-admin-shell\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">shell</span></code></a>, surchargez la méthode <code class=\"docutils literal notranslate\"><span class=\"pre\">get_auto_imports()</span></code>. Cette méthode doit renvoyer une séquence de chemins d’importation pour des objets et des modules disponibles dans l’application. Par exemple :</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">polls/management/commands/shell.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.management.commands</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">shell</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Command</span><span class=\"p\">(</span><span class=\"n\">shell</span><span class=\"o\">.</span><span class=\"n\">Command</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_auto_imports</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_auto_imports</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"p\">[</span>\n            <span class=\"s2\">&quot;django.urls.reverse&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;django.urls.resolve&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">]</span>\n</code></pre></figure>\n<p>La personnalisation ci-dessus ajoute <a class=\"reference internal\" href=\"/fr/5.2/ref/urlresolvers/#django.urls.resolve\" title=\"django.urls.resolve\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">resolve()</span></code></a> and <a class=\"reference internal\" href=\"/fr/5.2/ref/urlresolvers/#django.urls.reverse\" title=\"django.urls.reverse\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">reverse()</span></code></a> à l’espace de noms par défaut, qui contient déjà tous les modèles des applications présentes dans <a class=\"reference internal\" href=\"/fr/5.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>. Ces objets seront disponibles dans le <code class=\"docutils literal notranslate\"><span class=\"pre\">shell</span></code> sans devoir les importer manuellement.</p>\n<p>Le lancement de cette commande <code class=\"docutils literal notranslate\"><span class=\"pre\">shell</span></code> personnalisée avec <code class=\"docutils literal notranslate\"><span class=\"pre\">verbosity=2</span></code> va afficher :</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"go\">8 objects imported automatically:</span>\n\n<span class=\"go\">  from django.contrib.admin.models import LogEntry</span>\n<span class=\"go\">  from django.contrib.auth.models import Group, Permission, User</span>\n<span class=\"go\">  from django.contrib.contenttypes.models import ContentType</span>\n<span class=\"go\">  from django.contrib.sessions.models import Session</span>\n<span class=\"go\">  from django.urls import resolve, reverse</span>\n</code></pre></div>\n<p>Si une commande <code class=\"docutils literal notranslate\"><span class=\"pre\">shell</span></code> personnalisée inclut des chemins qui ne peuvent pas être importés, ces erreurs sont affichées si <code class=\"docutils literal notranslate\"><span class=\"pre\">verbosity</span></code> est à <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> ou plus. Les importations à double sont gérées automatiquement.</p>\n<p>Notez que les importations automatiques peuvent être désactivées pour une session <code class=\"docutils literal notranslate\"><span class=\"pre\">shell</span></code> spécifique en utilisant l’option <a class=\"reference internal\" href=\"/fr/5.2/ref/django-admin/#cmdoption-shell-no-imports\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">--no-imports</span></code></a>. Pour désactiver les importations automatiques de manière permanente, surchargez <code class=\"docutils literal notranslate\"><span class=\"pre\">get_auto_imports()</span></code> pour qu’elle renvoie <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Command</span><span class=\"p\">(</span><span class=\"n\">shell</span><span class=\"o\">.</span><span class=\"n\">Command</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_auto_imports</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"kc\">None</span>\n</code></pre></div>\n</section>","rootId":"how-to-customize-the-shell-command","toc":[{"title":"Personnalisation des importations automatiques","anchor":"customize-automatic-imports","children":[]}],"breadcrumbs":[{"docname":"howto/index","title":"Guides pratiques","url":"/fr/5.2/howto/"}],"prev":{"docname":"howto/custom-management-commands","title":"Écriture de commandes django-admin personnalisées","url":"/fr/5.2/howto/custom-management-commands/"},"next":{"docname":"faq/index","title":"FAQ Django","url":"/fr/5.2/faq/"},"formats":{"html":"/fr/5.2/howto/custom-shell/","markdown":"/fr/5.2/howto/custom-shell.md","json":"/fr/5.2/howto/custom-shell.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/howto/custom-shell.txt","official":"https://docs.djangoproject.com/fr/5.2/howto/custom-shell/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}