{"title":"Fichiers annexes de formulaire (classe Media)","version":"1.9","locale":"fr","docname":"topics/forms/media","url":"/fr/1.9/topics/forms/media/","canonical":"https://djangodocs.dev/fr/1.9/topics/forms/media/","summary":"L’affichage d’un formulaire Web attractif et ergonomique exige plus que du code HTML simple, il nécessite également des feuilles de style CSS, et si vous…","html":"<h1>Fichiers annexes de formulaire (classe <code class=\"docutils literal notranslate\">Media</code>)<a class=\"heading-anchor\" href=\"#form-assets-the-media-class\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>L’affichage d’un formulaire Web attractif et ergonomique exige plus que du code HTML simple, il nécessite également des feuilles de style CSS, et si vous voulez utiliser des composants « Web 2.0 » plaisants, il sera peut-être nécessaire d’inclure aussi du code JavaScript sur chaque page. La combinaison exacte de CSS et de JavaScript nécessaire pour une page donnée dépend des composants de formulaire employés sur cette page.</p>\n<p>C’est là où la définition de fichiers annexes intervient. Django permet d’associer différents fichiers comme des feuilles de style et des scripts à des formulaires et des composants qui ont besoin de ces fichiers. Par exemple, si vous voulez utiliser un calendrier pour afficher les champs date, vous pouvez définir un composant <code class=\"docutils literal notranslate\">Calendrier</code> personnalisé. Ce composant peut ensuite être associé à des fichiers CSS et JavaScript requis pour afficher le calendrier. Quand le composant <code class=\"docutils literal notranslate\">Calendrier</code> est utilisé dans un formulaire, Django est capable d’identifier les fichiers CSS et JavaScript nécessaires et de fournir la liste des noms de fichiers au formulaire de manière à ce qu’ils puissent être facilement inclus dans la page Web.</p>\n<aside class=\"admonition-assets-and-django-admin admonition\" role=\"note\">\n<p class=\"admonition-title\">Fichiers annexes dans l’administration de Django</p>\n<p>L’application d’administration de Django définit un certain nombre de composants personnalisés pour les calendriers, les sélections filtrées, etc. Ces composants définissent des exigences de fichiers annexes et l’administration de Django utilise ces composants personnalisés au lieu des composants par défaut de Django. Les gabarits de l’administration n’incluent que les fichiers nécessaires pour l’affichage des composants de la page en cours.</p>\n<p>Si vous appréciez les composants utilisés par le site d’administration de Django, vous pouvez librement les utiliser dans votre propre application ! Ils se trouvent dans <code class=\"docutils literal notranslate\">django.contrib.admin.widgets</code>.</p>\n</aside>\n<aside class=\"admonition-which-javascript-toolkit admonition\" role=\"note\">\n<p class=\"admonition-title\">Quelle bibliothèque JavaScript ?</p>\n<p>Il existe plusieurs bibliothèques JavaScript et beaucoup d’entre elles contiennent des composants utiles pour améliorer l’interface d’une application (comme par exemple des composants de calendrier). Django a délibérément évité de choisir parmi ces bibliothèques JavaScript. Chacune a ses forces et ses faiblesses, utilisez donc celle qui correspond à vos besoins. Django est capable d’intégrer n’importe quelle bibliothèque JavaScript.</p>\n</aside>\n<section id=\"assets-as-a-static-definition\">\n<span id=\"id1\"></span><h2>Fichiers annexes définis statiquement<a class=\"heading-anchor\" href=\"#assets-as-a-static-definition\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>La façon la plus simple de définir des fichiers annexes est sous forme de définition statique. Avec cette méthode, la déclaration se fait dans une classe <code class=\"docutils literal notranslate\">Media</code> interne. Les propriétés de la classe interne définissent les exigences.</p>\n<p>Voici un exemple simple :</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=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n\n<span class=\"k\">class</span> <span class=\"nc\">CalendarWidget</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>TextInput<span class=\"p\">):</span>\n    <span class=\"k\">class</span> <span class=\"nc\">Media</span><span class=\"p\">:</span>\n        css <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;all&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;pretty.css&#39;</span><span class=\"p\">,)</span>\n        <span class=\"p\">}</span>\n        js <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;animations.js&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;actions.js&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Ce code définit un composant <code class=\"docutils literal notranslate\">CalendarWidget</code>, qui est basé sur <code class=\"docutils literal notranslate\">TextInput</code>. Chaque fois que <code class=\"docutils literal notranslate\">CalendarWidget</code> sera utilisé dans un formulaire, ce dernier sera amené à inclure le fichier CSS <code class=\"docutils literal notranslate\">pretty.css</code> et les fichiers JavaScript <code class=\"docutils literal notranslate\">animations.js</code> et <code class=\"docutils literal notranslate\">actions.js</code>.</p>\n<p>Cette définition statique est convertie au moment de l’exécution en une propriété de composant nommée <code class=\"docutils literal notranslate\">media</code>. La liste des fichiers annexes d’une instance de composant <code class=\"docutils literal notranslate\">CalendarWidget</code> peut être obtenue par cette propriété :</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=\"gp\">&gt;&gt;&gt; </span>w <span class=\"o\">=</span> CalendarWidget<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>w<span class=\"o\">.</span>media<span class=\"p\">)</span>\n<span class=\"go\">&lt;link href=&quot;http://static.example.com/pretty.css&quot; type=&quot;text/css&quot; media=&quot;all&quot; rel=&quot;stylesheet&quot; /&gt;</span>\n<span class=\"go\">&lt;script type=&quot;text/javascript&quot; src=&quot;http://static.example.com/animations.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script type=&quot;text/javascript&quot; src=&quot;http://static.example.com/actions.js&quot;&gt;&lt;/script&gt;</span>\n</code></pre></div>\n<p>Voici une liste de toutes les options possibles de <code class=\"docutils literal notranslate\">Media</code>. Il n’y a pas d’option obligatoire.</p>\n<section id=\"css\">\n<h3><code class=\"docutils literal notranslate\">css</code><a class=\"heading-anchor\" href=\"#css\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Un dictionnaire décrivant les fichiers CSS requis par les différentes formes de support d’affichage.</p>\n<p>Les valeurs du dictionnaire doivent être composées de tuples/listes de noms de fichiers. Consultez <a class=\"reference internal\" href=\"#form-asset-paths\"><span class=\"std std-ref\">la section sur les chemins</span></a> pour plus de détails sur la manière de définir les chemins de ces fichiers.</p>\n<p>Les clés du dictionnaire correspondent aux types de support d’affichage. Ce sont les mêmes types que les fichiers CSS acceptent dans les déclarations « media » : “all”, “aural”, “braille”, “embossed”, “handheld”, “print”, “projection”, “screen”, “tty” and “tv”. Si vous avez besoin de feuilles de style différentes en fonction de types de support différents, indiquez des listes de fichiers CSS correspondant à chacun de ces types. L’exemple suivant fournit deux options CSS, une pour l’affichage à l’écran et l’autre pour l’impression :</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=\"nc\">Media</span><span class=\"p\">:</span>\n    css <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;screen&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;pretty.css&#39;</span><span class=\"p\">,),</span>\n        <span class=\"s1\">&#39;print&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;newspaper.css&#39;</span><span class=\"p\">,)</span>\n    <span class=\"p\">}</span>\n</code></pre></div>\n<p>Si un groupe de fichiers CSS convient à plusieurs types de support d’affichage, la clé de dictionnaire peut être une liste de types de support d’affichage séparés par des virgules. Dans l’exemple suivant, les télévisions et les projecteurs ont les mêmes exigences en terme de support :</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=\"nc\">Media</span><span class=\"p\">:</span>\n    css <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;screen&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;pretty.css&#39;</span><span class=\"p\">,),</span>\n        <span class=\"s1\">&#39;tv,projector&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;lo_res.css&#39;</span><span class=\"p\">,),</span>\n        <span class=\"s1\">&#39;print&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;newspaper.css&#39;</span><span class=\"p\">,)</span>\n    <span class=\"p\">}</span>\n</code></pre></div>\n<p>Si cette dernière définition de CSS devait être affichée, cela produirait le code HTML suivant :</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=\"o\">&lt;</span>link href<span class=\"o\">=</span><span class=\"s2\">&quot;http://static.example.com/pretty.css&quot;</span> <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"s2\">&quot;text/css&quot;</span> media<span class=\"o\">=</span><span class=\"s2\">&quot;screen&quot;</span> rel<span class=\"o\">=</span><span class=\"s2\">&quot;stylesheet&quot;</span> <span class=\"o\">/&gt;</span>\n<span class=\"o\">&lt;</span>link href<span class=\"o\">=</span><span class=\"s2\">&quot;http://static.example.com/lo_res.css&quot;</span> <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"s2\">&quot;text/css&quot;</span> media<span class=\"o\">=</span><span class=\"s2\">&quot;tv,projector&quot;</span> rel<span class=\"o\">=</span><span class=\"s2\">&quot;stylesheet&quot;</span> <span class=\"o\">/&gt;</span>\n<span class=\"o\">&lt;</span>link href<span class=\"o\">=</span><span class=\"s2\">&quot;http://static.example.com/newspaper.css&quot;</span> <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"s2\">&quot;text/css&quot;</span> media<span class=\"o\">=</span><span class=\"s2\">&quot;print&quot;</span> rel<span class=\"o\">=</span><span class=\"s2\">&quot;stylesheet&quot;</span> <span class=\"o\">/&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"js\">\n<h3><code class=\"docutils literal notranslate\">js</code><a class=\"heading-anchor\" href=\"#js\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Un tuple décrivant les fichiers JavaScript nécessaires. Consultez <a class=\"reference internal\" href=\"#form-asset-paths\"><span class=\"std std-ref\">la section sur les chemins</span></a> pour plus de détails sur la manière de définir les chemins de ces fichiers.</p>\n</section>\n<section id=\"extend\">\n<h3><code class=\"docutils literal notranslate\">extend</code><a class=\"heading-anchor\" href=\"#extend\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Une valeur booléenne définissant le comportement de l’héritage des déclarations <code class=\"docutils literal notranslate\">Media</code>.</p>\n<p>Par défaut, tout objet utilisant une définition statique de <code class=\"docutils literal notranslate\">Media</code> hérite de tous les fichiers annexes associés au composant parent, et ceci quelle que soit la manière dont le parent définit ses propres exigences. Par exemple, si nous devions améliorer notre composant <code class=\"docutils literal notranslate\">Calendar</code> basique de l’exemple ci-dessus :</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=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">FancyCalendarWidget</span><span class=\"p\">(</span>CalendarWidget<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"k\">class</span> <span class=\"nc\">Media</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>        css <span class=\"o\">=</span> <span class=\"p\">{</span>\n<span class=\"gp\">... </span>            <span class=\"s1\">&#39;all&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;fancy.css&#39;</span><span class=\"p\">,)</span>\n<span class=\"gp\">... </span>        <span class=\"p\">}</span>\n<span class=\"gp\">... </span>        js <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;whizbang.js&#39;</span><span class=\"p\">,)</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>w <span class=\"o\">=</span> FancyCalendarWidget<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>w<span class=\"o\">.</span>media<span class=\"p\">)</span>\n<span class=\"go\">&lt;link href=&quot;http://static.example.com/pretty.css&quot; type=&quot;text/css&quot; media=&quot;all&quot; rel=&quot;stylesheet&quot; /&gt;</span>\n<span class=\"go\">&lt;link href=&quot;http://static.example.com/fancy.css&quot; type=&quot;text/css&quot; media=&quot;all&quot; rel=&quot;stylesheet&quot; /&gt;</span>\n<span class=\"go\">&lt;script type=&quot;text/javascript&quot; src=&quot;http://static.example.com/animations.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script type=&quot;text/javascript&quot; src=&quot;http://static.example.com/actions.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script type=&quot;text/javascript&quot; src=&quot;http://static.example.com/whizbang.js&quot;&gt;&lt;/script&gt;</span>\n</code></pre></div>\n<p>Le composant <code class=\"docutils literal notranslate\">FancyCalendar</code> hérite de tous les fichiers annexes de son composant parent. Si vous ne souhaitez pas que <code class=\"docutils literal notranslate\">Media</code> soit hérité de cette façon, ajoutez une déclaration <code class=\"docutils literal notranslate\">extend=False</code> à la déclaration de <code class=\"docutils literal notranslate\">Media</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=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">FancyCalendarWidget</span><span class=\"p\">(</span>CalendarWidget<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"k\">class</span> <span class=\"nc\">Media</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>        extend <span class=\"o\">=</span> <span class=\"kc\">False</span>\n<span class=\"gp\">... </span>        css <span class=\"o\">=</span> <span class=\"p\">{</span>\n<span class=\"gp\">... </span>            <span class=\"s1\">&#39;all&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;fancy.css&#39;</span><span class=\"p\">,)</span>\n<span class=\"gp\">... </span>        <span class=\"p\">}</span>\n<span class=\"gp\">... </span>        js <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;whizbang.js&#39;</span><span class=\"p\">,)</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>w <span class=\"o\">=</span> FancyCalendarWidget<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>w<span class=\"o\">.</span>media<span class=\"p\">)</span>\n<span class=\"go\">&lt;link href=&quot;http://static.example.com/fancy.css&quot; type=&quot;text/css&quot; media=&quot;all&quot; rel=&quot;stylesheet&quot; /&gt;</span>\n<span class=\"go\">&lt;script type=&quot;text/javascript&quot; src=&quot;http://static.example.com/whizbang.js&quot;&gt;&lt;/script&gt;</span>\n</code></pre></div>\n<p>Si vous avez besoin de pouvoir contrôler encore plus l’héritage, définissez vos fichiers annexes en utilisant une <a class=\"reference internal\" href=\"#dynamic-property\"><span class=\"std std-ref\">propriété dynamique</span></a>. Les propriétés dynamiques vous donnent un contrôle total sur les fichiers hérités et ceux qui ne le seront pas.</p>\n</section>\n</section>\n<section id=\"media-as-a-dynamic-property\">\n<span id=\"dynamic-property\"></span><h2><code class=\"docutils literal notranslate\">Media</code> comme propriété dynamique<a class=\"heading-anchor\" href=\"#media-as-a-dynamic-property\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Si vous avez besoin d’effectuer certaines manipulations encore plus sophistiquées sur les fichiers annexes requis, vous pouvez définir directement la propriété <code class=\"docutils literal notranslate\">media</code>. Cela peut être réalisé en définissant une propriété du composant qui renvoie une instance de <code class=\"docutils literal notranslate\">forms.Media</code>. le constructeur de <code class=\"docutils literal notranslate\">forms.Media</code> accepte les paramètres nommés <code class=\"docutils literal notranslate\">css</code> and <code class=\"docutils literal notranslate\">js</code> dans le même format que celui qui est utilisé pour les définitions statiques de fichiers annexes.</p>\n<p>Par exemple, la définition statique de notre composant de calendrier pourrait tout aussi bien être réalisée de manière dynamique :</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=\"nc\">CalendarWidget</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>TextInput<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_media</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> forms<span class=\"o\">.</span>Media<span class=\"p\">(</span>css<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;all&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;pretty.css&#39;</span><span class=\"p\">,)},</span>\n                           js<span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s1\">&#39;animations.js&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;actions.js&#39;</span><span class=\"p\">))</span>\n    media <span class=\"o\">=</span> <span class=\"nb\">property</span><span class=\"p\">(</span>_media<span class=\"p\">)</span>\n</code></pre></div>\n<p>Consultez la section sur les <a class=\"reference internal\" href=\"#media-objects\">objets Media</a> pour plus de détails sur la manière de construire des valeurs de retour pour les propriétés dynamiques <code class=\"docutils literal notranslate\">media</code>.</p>\n</section>\n<section id=\"paths-in-asset-definitions\">\n<span id=\"form-asset-paths\"></span><h2>Chemins dans les définitions de fichiers annexes<a class=\"heading-anchor\" href=\"#paths-in-asset-definitions\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Les chemins utilisés pour définir les fichiers annexes peuvent être relatifs ou absolus. Si un chemin commence par <code class=\"docutils literal notranslate\">/</code>, <code class=\"docutils literal notranslate\">http://</code> ou <code class=\"docutils literal notranslate\">https://</code>, il sera interprété comme un chemin absolu et laissé tel quel. Tous les autres chemins seront préfixés par la valeur appropriée.</p>\n<p>Dans le cadre de l’introduction de l”<a class=\"reference internal\" href=\"/fr/1.9/ref/contrib/staticfiles/\"><span class=\"doc\">application staticfiles</span></a>, deux nouveaux réglages ont été ajoutés pour faire référence aux « fichiers statiques » (images, CSS, JavaScript, etc.) nécessaires à l’affichage d’une page Web complète : <a class=\"reference internal\" href=\"/fr/1.9/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\">STATIC_URL</code></a> et <a class=\"reference internal\" href=\"/fr/1.9/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\">STATIC_ROOT</code></a>.</p>\n<p>Pour trouver le bon préfixe à utiliser, Django contrôle si le réglage <a class=\"reference internal\" href=\"/fr/1.9/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\">STATIC_URL</code></a> est différent de <code class=\"docutils literal notranslate\">None</code> et se rabat sur <a class=\"reference internal\" href=\"/fr/1.9/ref/settings/#std-setting-MEDIA_URL\"><code class=\"xref std std-setting docutils literal notranslate\">MEDIA_URL</code></a> en cas de besoin. Par exemple, si le réglage <a class=\"reference internal\" href=\"/fr/1.9/ref/settings/#std-setting-MEDIA_URL\"><code class=\"xref std std-setting docutils literal notranslate\">MEDIA_URL</code></a> de votre site est <code class=\"docutils literal notranslate\">'http://uploads.example.com/'</code> et que <a class=\"reference internal\" href=\"/fr/1.9/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\">STATIC_URL</code></a>  vaut <code class=\"docutils literal notranslate\">None</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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">CalendarWidget</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>TextInput<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"k\">class</span> <span class=\"nc\">Media</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>        css <span class=\"o\">=</span> <span class=\"p\">{</span>\n<span class=\"gp\">... </span>            <span class=\"s1\">&#39;all&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;/css/pretty.css&#39;</span><span class=\"p\">,),</span>\n<span class=\"gp\">... </span>        <span class=\"p\">}</span>\n<span class=\"gp\">... </span>        js <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;animations.js&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;http://othersite.com/actions.js&#39;</span><span class=\"p\">)</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>w <span class=\"o\">=</span> CalendarWidget<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>w<span class=\"o\">.</span>media<span class=\"p\">)</span>\n<span class=\"go\">&lt;link href=&quot;/css/pretty.css&quot; type=&quot;text/css&quot; media=&quot;all&quot; rel=&quot;stylesheet&quot; /&gt;</span>\n<span class=\"go\">&lt;script type=&quot;text/javascript&quot; src=&quot;http://uploads.example.com/animations.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script type=&quot;text/javascript&quot; src=&quot;http://othersite.com/actions.js&quot;&gt;&lt;/script&gt;</span>\n</code></pre></div>\n<p>Mai si <a class=\"reference internal\" href=\"/fr/1.9/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\">STATIC_URL</code></a> vaut <code class=\"docutils literal notranslate\">'http://static.example.com/'</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=\"gp\">&gt;&gt;&gt; </span>w <span class=\"o\">=</span> CalendarWidget<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>w<span class=\"o\">.</span>media<span class=\"p\">)</span>\n<span class=\"go\">&lt;link href=&quot;/css/pretty.css&quot; type=&quot;text/css&quot; media=&quot;all&quot; rel=&quot;stylesheet&quot; /&gt;</span>\n<span class=\"go\">&lt;script type=&quot;text/javascript&quot; src=&quot;http://static.example.com/animations.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script type=&quot;text/javascript&quot; src=&quot;http://othersite.com/actions.js&quot;&gt;&lt;/script&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"media-objects\">\n<h2>Objets <code class=\"docutils literal notranslate\">Media</code><a class=\"heading-anchor\" href=\"#media-objects\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Lorsque vous interrogez l’attribut <code class=\"docutils literal notranslate\">media</code> d’un composant ou d’un formulaire, la valeur renvoyée est un objet <code class=\"docutils literal notranslate\">forms.Media</code>. Comme nous l’avons déjà vu, la représentation textuelle d’un objet <code class=\"docutils literal notranslate\">Media</code> contient le code HTML nécessaire pour inclure les fichiers concernés dans le bloc <code class=\"docutils literal notranslate\">&lt;head&gt;</code> de votre page HTML.</p>\n<p>Cependant, les objets <code class=\"docutils literal notranslate\">Media</code> ont certaines autres propriétés intéressantes.</p>\n<section id=\"subsets-of-assets\">\n<h3>Sous-ensembles de fichiers annexes<a class=\"heading-anchor\" href=\"#subsets-of-assets\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Si vous ne souhaitez obtenir que les fichiers d’un type particulier, vous pouvez utiliser l’opérateur d’indice pour filtrer le support qui vous intéresse. Par exemple :</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=\"gp\">&gt;&gt;&gt; </span>w <span class=\"o\">=</span> CalendarWidget<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>w<span class=\"o\">.</span>media<span class=\"p\">)</span>\n<span class=\"go\">&lt;link href=&quot;http://static.example.com/pretty.css&quot; type=&quot;text/css&quot; media=&quot;all&quot; rel=&quot;stylesheet&quot; /&gt;</span>\n<span class=\"go\">&lt;script type=&quot;text/javascript&quot; src=&quot;http://static.example.com/animations.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script type=&quot;text/javascript&quot; src=&quot;http://static.example.com/actions.js&quot;&gt;&lt;/script&gt;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>w<span class=\"o\">.</span>media<span class=\"p\">[</span><span class=\"s1\">&#39;css&#39;</span><span class=\"p\">])</span>\n<span class=\"go\">&lt;link href=&quot;http://static.example.com/pretty.css&quot; type=&quot;text/css&quot; media=&quot;all&quot; rel=&quot;stylesheet&quot; /&gt;</span>\n</code></pre></div>\n<p>Lorsque vous employez l’opérateur d’indice, la valeur renvoyée est un nouvel objet <code class=\"docutils literal notranslate\">Media</code>, mais qui ne contient que les fichiers qui vous intéressent.</p>\n</section>\n<section id=\"combining-media-objects\">\n<h3>Combinaison d’objets <code class=\"docutils literal notranslate\">Media</code><a class=\"heading-anchor\" href=\"#combining-media-objects\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Les objets <code class=\"docutils literal notranslate\">Media</code> peuvent aussi être fusionnés. Lorsque l’on additionne deux objets <code class=\"docutils literal notranslate\">Media</code>, l’objet <code class=\"docutils literal notranslate\">Media</code> résultant contient l’union des fichiers annexes contenus dans les deux objets :</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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">CalendarWidget</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>TextInput<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"k\">class</span> <span class=\"nc\">Media</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>        css <span class=\"o\">=</span> <span class=\"p\">{</span>\n<span class=\"gp\">... </span>            <span class=\"s1\">&#39;all&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;pretty.css&#39;</span><span class=\"p\">,)</span>\n<span class=\"gp\">... </span>        <span class=\"p\">}</span>\n<span class=\"gp\">... </span>        js <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;animations.js&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;actions.js&#39;</span><span class=\"p\">)</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">OtherWidget</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>TextInput<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"k\">class</span> <span class=\"nc\">Media</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>        js <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;whizbang.js&#39;</span><span class=\"p\">,)</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>w1 <span class=\"o\">=</span> CalendarWidget<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>w2 <span class=\"o\">=</span> OtherWidget<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>w1<span class=\"o\">.</span>media <span class=\"o\">+</span> w2<span class=\"o\">.</span>media<span class=\"p\">)</span>\n<span class=\"go\">&lt;link href=&quot;http://static.example.com/pretty.css&quot; type=&quot;text/css&quot; media=&quot;all&quot; rel=&quot;stylesheet&quot; /&gt;</span>\n<span class=\"go\">&lt;script type=&quot;text/javascript&quot; src=&quot;http://static.example.com/animations.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script type=&quot;text/javascript&quot; src=&quot;http://static.example.com/actions.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script type=&quot;text/javascript&quot; src=&quot;http://static.example.com/whizbang.js&quot;&gt;&lt;/script&gt;</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"media-on-forms\">\n<h2><code class=\"docutils literal notranslate\">Media</code> pour les formulaires<a class=\"heading-anchor\" href=\"#media-on-forms\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Les composants ne sont pas les seuls objets qui peuvent posséder des définitions <code class=\"docutils literal notranslate\">media</code>, les formulaires peuvent aussi en définir. Les règles concernant les définitions <code class=\"docutils literal notranslate\">media</code> des formulaires sont les mêmes que pour les composants : les déclarations peuvent être statiques ou dynamiques ; les règles des chemins et de l’héritage de ces déclarations sont également identiques.</p>\n<p>Que vous définissiez une déclaration <code class=\"docutils literal notranslate\">media</code> ou non, <em>tous</em> les objets <code class=\"docutils literal notranslate\">Form</code> possèdent une propriété <code class=\"docutils literal notranslate\">media</code>. La valeur par défaut de cette propriété est le résultat de la fusion de toutes les définitions <code class=\"docutils literal notranslate\">media</code> de tous les composants du formulaire :</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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">ContactForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    date <span class=\"o\">=</span> DateField<span class=\"p\">(</span>widget<span class=\"o\">=</span>CalendarWidget<span class=\"p\">)</span>\n<span class=\"gp\">... </span>    name <span class=\"o\">=</span> CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">,</span> widget<span class=\"o\">=</span>OtherWidget<span class=\"p\">)</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> ContactForm<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>media\n<span class=\"go\">&lt;link href=&quot;http://static.example.com/pretty.css&quot; type=&quot;text/css&quot; media=&quot;all&quot; rel=&quot;stylesheet&quot; /&gt;</span>\n<span class=\"go\">&lt;script type=&quot;text/javascript&quot; src=&quot;http://static.example.com/animations.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script type=&quot;text/javascript&quot; src=&quot;http://static.example.com/actions.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script type=&quot;text/javascript&quot; src=&quot;http://static.example.com/whizbang.js&quot;&gt;&lt;/script&gt;</span>\n</code></pre></div>\n<p>Si vous souhaitez associer des fichiers annexes supplémentaires à un formulaire, par exemple des règles CSS pour la mise en forme du formulaire, ajoutez simplement une déclaration <code class=\"docutils literal notranslate\">Media</code> au formulaire :</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=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">ContactForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    date <span class=\"o\">=</span> DateField<span class=\"p\">(</span>widget<span class=\"o\">=</span>CalendarWidget<span class=\"p\">)</span>\n<span class=\"gp\">... </span>    name <span class=\"o\">=</span> CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">,</span> widget<span class=\"o\">=</span>OtherWidget<span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">... </span>    <span class=\"k\">class</span> <span class=\"nc\">Media</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>        css <span class=\"o\">=</span> <span class=\"p\">{</span>\n<span class=\"gp\">... </span>            <span class=\"s1\">&#39;all&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;layout.css&#39;</span><span class=\"p\">,)</span>\n<span class=\"gp\">... </span>        <span class=\"p\">}</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> ContactForm<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>media\n<span class=\"go\">&lt;link href=&quot;http://static.example.com/pretty.css&quot; type=&quot;text/css&quot; media=&quot;all&quot; rel=&quot;stylesheet&quot; /&gt;</span>\n<span class=\"go\">&lt;link href=&quot;http://static.example.com/layout.css&quot; type=&quot;text/css&quot; media=&quot;all&quot; rel=&quot;stylesheet&quot; /&gt;</span>\n<span class=\"go\">&lt;script type=&quot;text/javascript&quot; src=&quot;http://static.example.com/animations.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script type=&quot;text/javascript&quot; src=&quot;http://static.example.com/actions.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script type=&quot;text/javascript&quot; src=&quot;http://static.example.com/whizbang.js&quot;&gt;&lt;/script&gt;</span>\n</code></pre></div>\n</section>","rootId":"form-assets-the-media-class","toc":[{"title":"Fichiers annexes définis statiquement","anchor":"assets-as-a-static-definition","children":[{"title":"css","anchor":"css","children":[]},{"title":"js","anchor":"js","children":[]},{"title":"extend","anchor":"extend","children":[]}]},{"title":"Media comme propriété dynamique","anchor":"media-as-a-dynamic-property","children":[]},{"title":"Chemins dans les définitions de fichiers annexes","anchor":"paths-in-asset-definitions","children":[]},{"title":"Objets Media","anchor":"media-objects","children":[{"title":"Sous-ensembles de fichiers annexes","anchor":"subsets-of-assets","children":[]},{"title":"Combinaison d’objets Media","anchor":"combining-media-objects","children":[]}]},{"title":"Media pour les formulaires","anchor":"media-on-forms","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Utilisation de Django","url":"/fr/1.9/topics/"},{"docname":"topics/forms/index","title":"Utilisation des formulaires","url":"/fr/1.9/topics/forms/"}],"prev":{"docname":"topics/forms/modelforms","title":"Création de formulaires à partir de modèles","url":"/fr/1.9/topics/forms/modelforms/"},"next":{"docname":"topics/templates","title":"Gabarits","url":"/fr/1.9/topics/templates/"},"formats":{"html":"/fr/1.9/topics/forms/media/","markdown":"/fr/1.9/topics/forms/media.md","json":"/fr/1.9/topics/forms/media.json"},"source":"https://github.com/django/django/blob/stable/1.9.x/docs/topics/forms/media.txt","official":"https://docs.djangoproject.com/fr/1.9/topics/forms/media/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","fr","ja","id","pt-br","es"]}