{"title":"フォームアセット (Media クラス)","version":"4.1","locale":"ja","docname":"topics/forms/media","url":"/ja/4.1/topics/forms/media/","canonical":"https://djangodocs.dev/ja/4.1/topics/forms/media/","summary":"Rendering an attractive and easy-to-use web form requires more than just HTML - it also requires CSS stylesheets, and if you want to use fancy widgets, you may also…","html":"<h1>フォームアセット (<code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> クラス)<a class=\"heading-anchor\" href=\"#form-assets-the-media-class\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Rendering an attractive and easy-to-use web form requires more than just\nHTML - it also requires CSS stylesheets, and if you want to use fancy widgets,\nyou may also need to include some JavaScript on each page. The exact\ncombination of CSS and JavaScript that is required for any given page will\ndepend upon the widgets that are in use on that page.</p>\n<p>This is where asset definitions come in. Django allows you to\nassociate different files -- like stylesheets and scripts -- with the\nforms and widgets that require those assets. For example, if you want\nto use a calendar to render DateFields, you can define a custom\nCalendar widget. This widget can then be associated with the CSS and\nJavaScript that is required to render the calendar. When the Calendar\nwidget is used on a form, Django is able to identify the CSS and\nJavaScript files that are required, and provide the list of file names\nin a form suitable for inclusion on your web page.</p>\n<aside class=\"admonition-assets-and-django-admin admonition\">\n<p class=\"admonition-title\">アセットと Django Admin</p>\n<p>The Django Admin application defines a number of customized\nwidgets for calendars, filtered selections, and so on. These\nwidgets define asset requirements, and the Django Admin uses the\ncustom widgets in place of the Django defaults. The Admin\ntemplates will only include those files that are required to\nrender the widgets on any given page.</p>\n<p>If you like the widgets that the Django Admin application uses,\nfeel free to use them in your own application! They're all stored\nin <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.admin.widgets</span></code>.</p>\n</aside>\n<aside class=\"admonition-which-javascript-toolkit admonition\">\n<p class=\"admonition-title\">Which JavaScript toolkit?</p>\n<p>Many JavaScript toolkits exist, and many of them include widgets (such\nas calendar widgets) that can be used to enhance your application.\nDjango has deliberately avoided blessing any one JavaScript toolkit.\nEach toolkit has its own relative strengths and weaknesses - use\nwhichever toolkit suits your requirements. Django is able to integrate\nwith any JavaScript toolkit.</p>\n</aside>\n<section id=\"assets-as-a-static-definition\">\n<span id=\"id1\"></span><h2>定数として定義されたアセット<a class=\"heading-anchor\" href=\"#assets-as-a-static-definition\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>アセットを定義する最も簡単な方法は、定数とすることです。この方法を利用するには、内部 <code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> クラスに宣言します。内部クラスのプロパティで必要なものを定義します。</p>\n<p>以下に例を示します。</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=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">CalendarWidget</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">TextInput</span><span class=\"p\">):</span>\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Media</span><span class=\"p\">:</span>\n        <span class=\"n\">css</span> <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        <span class=\"n\">js</span> <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>このコードでは、<code class=\"docutils literal notranslate\"><span class=\"pre\">CalendarWidget</span></code> を定義しており、これは <code class=\"docutils literal notranslate\"><span class=\"pre\">TextInput</span></code> に基づいています。CalendarWidget をフォーム上で使用すると、CSS ファイル <code class=\"docutils literal notranslate\"><span class=\"pre\">pretty.css</span></code> と JavaScript ファイル  <code class=\"docutils literal notranslate\"><span class=\"pre\">animations.js</span></code> および <code class=\"docutils literal notranslate\"><span class=\"pre\">actions.js</span></code> を読み込めるようになります。</p>\n<p>この定数定義は、実行時に <code class=\"docutils literal notranslate\"><span class=\"pre\">media</span></code> という名前のウィジェットプロパティに変換されます。<code class=\"docutils literal notranslate\"><span class=\"pre\">CalendarWidget</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=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">w</span> <span class=\"o\">=</span> <span class=\"n\">CalendarWidget</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">w</span><span class=\"o\">.</span><span class=\"n\">media</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;link href=&quot;http://static.example.com/pretty.css&quot; media=&quot;all&quot; rel=&quot;stylesheet&quot;&gt;</span>\n<span class=\"go\">&lt;script src=&quot;http://static.example.com/animations.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;http://static.example.com/actions.js&quot;&gt;&lt;/script&gt;</span>\n</code></pre></div>\n<p>以下は指定可能な <code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> オプションです。必須のものはありません。</p>\n<section id=\"css\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">css</span></code><a class=\"heading-anchor\" href=\"#css\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>様々な形式の出力メディアに対して、必要な CSSファイルを定義するディクショナリです。</p>\n<p>ディクショナリの値はファイル名のタプルかリストで指定します。ファイルのパスを指定する方法は <a class=\"reference internal\" href=\"#form-asset-paths\"><span class=\"std std-ref\">パスの章</span></a> を参照してください。</p>\n<p>ディクショナリのキーは、出力するメディアタイプを表します。これらは CSS ファイル認識可能なメディアタイプと同じです: 'all'、'aural'、'braille'、'embossed'、'handheld'、'print'、'projection'、'screen'、'tty'、'tv'。メディアタイプに応じたスタイルシートを提供する必要がある場合、各出力メディアに対して CSS ファイルを作成してください。以下の例は 2 つの CSS オプションを提供します -- 1 つはスクリーン用でもう一つは印刷用です:</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\">Media</span><span class=\"p\">:</span>\n    <span class=\"n\">css</span> <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>1 つのCSS ファイルのグループを複数の出力メディアタイプに適用するには、出力メディアタイプをカンマで区切ってディス書なりのキーに指定します。以下の例では、TV とプロジェクターは同じメディアを参照します:</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\">Media</span><span class=\"p\">:</span>\n    <span class=\"n\">css</span> <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>最後の例の CSS 定義を描画すると、HTML が出力されます:</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><span class=\"n\">link</span> <span class=\"n\">href</span><span class=\"o\">=</span><span class=\"s2\">&quot;http://static.example.com/pretty.css&quot;</span> <span class=\"n\">media</span><span class=\"o\">=</span><span class=\"s2\">&quot;screen&quot;</span> <span class=\"n\">rel</span><span class=\"o\">=</span><span class=\"s2\">&quot;stylesheet&quot;</span><span class=\"o\">&gt;</span>\n<span class=\"o\">&lt;</span><span class=\"n\">link</span> <span class=\"n\">href</span><span class=\"o\">=</span><span class=\"s2\">&quot;http://static.example.com/lo_res.css&quot;</span> <span class=\"n\">media</span><span class=\"o\">=</span><span class=\"s2\">&quot;tv,projector&quot;</span> <span class=\"n\">rel</span><span class=\"o\">=</span><span class=\"s2\">&quot;stylesheet&quot;</span><span class=\"o\">&gt;</span>\n<span class=\"o\">&lt;</span><span class=\"n\">link</span> <span class=\"n\">href</span><span class=\"o\">=</span><span class=\"s2\">&quot;http://static.example.com/newspaper.css&quot;</span> <span class=\"n\">media</span><span class=\"o\">=</span><span class=\"s2\">&quot;print&quot;</span> <span class=\"n\">rel</span><span class=\"o\">=</span><span class=\"s2\">&quot;stylesheet&quot;</span><span class=\"o\">&gt;</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"4.1\">\n<p class=\"version-note-title\">Changed in Django 4.1</p><p>In older versions, the <code class=\"docutils literal notranslate\"><span class=\"pre\">type=&quot;text/css&quot;</span></code> attribute is included in CSS\nlinks.</p>\n</aside>\n</section>\n<section id=\"js\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">js</span></code><a class=\"heading-anchor\" href=\"#js\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>必要な JavaScript ファイルを定義したタプルです。ファイルのパスを指定する方法は <a class=\"reference internal\" href=\"#form-asset-paths\"><span class=\"std std-ref\">パスの章</span></a> を参照してください。</p>\n</section>\n<section id=\"extend\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">extend</span></code><a class=\"heading-anchor\" href=\"#extend\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> 宣言に対する継承動作を定義する真偽値です。</p>\n<p>デフォルトでは、定数の <code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> 定義を使用するすべてのオブジェクトは、親ウィジェットに紐付いたすべてのアセットを継承します。この挙動は、親ウィジェットがどのように自身の要件を定義しているかに関わらず発生します。例えば、上の例にあるベーシックな Calendar ウィジェットを拡張するには:</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=\"w\"> </span><span class=\"nc\">FancyCalendarWidget</span><span class=\"p\">(</span><span class=\"n\">CalendarWidget</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Media</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>        <span class=\"n\">css</span> <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>        <span class=\"n\">js</span> <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><span class=\"n\">w</span> <span class=\"o\">=</span> <span class=\"n\">FancyCalendarWidget</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">w</span><span class=\"o\">.</span><span class=\"n\">media</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;link href=&quot;http://static.example.com/pretty.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; media=&quot;all&quot; rel=&quot;stylesheet&quot;&gt;</span>\n<span class=\"go\">&lt;script src=&quot;http://static.example.com/animations.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;http://static.example.com/actions.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;http://static.example.com/whizbang.js&quot;&gt;&lt;/script&gt;</span>\n</code></pre></div>\n<p>FancyCalendar ウィジェットは親ウィジェットからすべてのアセットを継承します。これを回避したい場合には <code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> 宣言に <code class=\"docutils literal notranslate\"><span class=\"pre\">extend=False</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=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">FancyCalendarWidget</span><span class=\"p\">(</span><span class=\"n\">CalendarWidget</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Media</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>        <span class=\"n\">extend</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n<span class=\"gp\">... </span>        <span class=\"n\">css</span> <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>        <span class=\"n\">js</span> <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><span class=\"n\">w</span> <span class=\"o\">=</span> <span class=\"n\">FancyCalendarWidget</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">w</span><span class=\"o\">.</span><span class=\"n\">media</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;link href=&quot;http://static.example.com/fancy.css&quot; media=&quot;all&quot; rel=&quot;stylesheet&quot;&gt;</span>\n<span class=\"go\">&lt;script src=&quot;http://static.example.com/whizbang.js&quot;&gt;&lt;/script&gt;</span>\n</code></pre></div>\n<p>継承をより詳細にコントロールするにあｈ、<a class=\"reference internal\" href=\"#dynamic-property\"><span class=\"std std-ref\">動的なプロパティ</span></a> を使ってアセットを定義してください。 動的なプロパティを使えば、どのファイルを継承し、また継承しないかを完全にコントロールできます。</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\"><span class=\"pre\">Media</span></code><a class=\"heading-anchor\" href=\"#media-as-a-dynamic-property\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>アセット要件のより詳細な操作が必要な場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">media</span></code> プロパティを直接定義することができます。これは、<code class=\"docutils literal notranslate\"><span class=\"pre\">forms.Media</span></code> のインスタンスを返すウィジェットプロパティを定義することで実現できます。<code class=\"docutils literal notranslate\"><span class=\"pre\">forms.Media</span></code> に対するコンストラクタは、定数によるメディア定義と同様の形式で、<code class=\"docutils literal notranslate\"><span class=\"pre\">css</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">js</span></code> のキーワード引数を認識します。</p>\n<p>例えば、上記例で扱ってきた Calendar Widget に対する定数の定義は、動的な方法では以下のように定義できます:</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\">CalendarWidget</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">TextInput</span><span class=\"p\">):</span>\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span><span class=\"w\"> </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> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Media</span><span class=\"p\">(</span><span class=\"n\">css</span><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                           <span class=\"n\">js</span><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>動的な <code class=\"docutils literal notranslate\"><span class=\"pre\">media</span></code> プロパティに対する戻り値を構成する方法については、Media objects`_ を参照してください。</p>\n</section>\n<section id=\"paths-in-asset-definitions\">\n<span id=\"form-asset-paths\"></span><h2>アセット定義内のパス<a class=\"heading-anchor\" href=\"#paths-in-asset-definitions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"paths-as-strings\">\n<h3>Paths as strings<a class=\"heading-anchor\" href=\"#paths-as-strings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>String paths used to specify assets can be either relative or absolute. If a\npath starts with <code class=\"docutils literal notranslate\"><span class=\"pre\">/</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">http://</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">https://</span></code>, it will be\ninterpreted as an absolute path, and left as-is. All other paths will\nbe prepended with the value of the appropriate prefix. If the\n<a class=\"reference internal\" href=\"/ja/4.1/ref/contrib/staticfiles/#module-django.contrib.staticfiles\" title=\"django.contrib.staticfiles: An app for handling static files.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles</span></code></a> app is installed, it will be used to serve\nassets.</p>\n<p>mod:django.contrib.staticfiles を使うかどうかに関わらず、ウェブページを完全に表示するために <a class=\"reference internal\" href=\"/ja/4.1/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_URL</span></code></a> と <a class=\"reference internal\" href=\"/ja/4.1/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_ROOT</span></code></a> の設定が必要となります。</p>\n<p>適切な接頭辞を特定するため、Django <a class=\"reference internal\" href=\"/ja/4.1/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_URL</span></code></a> 設定が <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> でないかチェックし、自動的に <a class=\"reference internal\" href=\"/ja/4.1/ref/settings/#std-setting-MEDIA_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_URL</span></code></a> を使うようフォールバックします。例えば、サイトに対する <a class=\"reference internal\" href=\"/ja/4.1/ref/settings/#std-setting-MEDIA_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_URL</span></code></a> が <code class=\"docutils literal notranslate\"><span class=\"pre\">'http://uploads.example.com/'</span></code> で <a class=\"reference internal\" href=\"/ja/4.1/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_URL</span></code></a> が <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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">CalendarWidget</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">TextInput</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Media</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>        <span class=\"n\">css</span> <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>        <span class=\"n\">js</span> <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><span class=\"n\">w</span> <span class=\"o\">=</span> <span class=\"n\">CalendarWidget</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">w</span><span class=\"o\">.</span><span class=\"n\">media</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;link href=&quot;/css/pretty.css&quot; media=&quot;all&quot; rel=&quot;stylesheet&quot;&gt;</span>\n<span class=\"go\">&lt;script src=&quot;http://uploads.example.com/animations.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;http://othersite.com/actions.js&quot;&gt;&lt;/script&gt;</span>\n</code></pre></div>\n<p>一方、<a class=\"reference internal\" href=\"/ja/4.1/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_URL</span></code></a> が '<a class=\"reference external\" href=\"http://static.example.com/\">http://static.example.com/</a>'`` の場合:</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=\"n\">w</span> <span class=\"o\">=</span> <span class=\"n\">CalendarWidget</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">w</span><span class=\"o\">.</span><span class=\"n\">media</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;link href=&quot;/css/pretty.css&quot; media=&quot;all&quot; rel=&quot;stylesheet&quot;&gt;</span>\n<span class=\"go\">&lt;script src=&quot;http://static.example.com/animations.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;http://othersite.com/actions.js&quot;&gt;&lt;/script&gt;</span>\n</code></pre></div>\n<p>もしくは、<a class=\"reference internal\" href=\"/ja/4.1/ref/contrib/staticfiles/#module-django.contrib.staticfiles\" title=\"django.contrib.staticfiles: An app for handling static files.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">staticfiles</span></code></a> が <a class=\"reference internal\" href=\"/ja/4.1/ref/contrib/staticfiles/#django.contrib.staticfiles.storage.ManifestStaticFilesStorage\" title=\"django.contrib.staticfiles.storage.ManifestStaticFilesStorage\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManifestStaticFilesStorage</span></code></a> を使って設定されている場合:</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=\"n\">w</span> <span class=\"o\">=</span> <span class=\"n\">CalendarWidget</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">w</span><span class=\"o\">.</span><span class=\"n\">media</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;link href=&quot;/css/pretty.css&quot; media=&quot;all&quot; rel=&quot;stylesheet&quot;&gt;</span>\n<span class=\"go\">&lt;script src=&quot;https://static.example.com/animations.27e20196a850.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;http://othersite.com/actions.js&quot;&gt;&lt;/script&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"paths-as-objects\">\n<h3>Paths as objects<a class=\"heading-anchor\" href=\"#paths-as-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"version-note version-added\" data-version=\"4.1\">\n<p class=\"version-note-title\">New in Django 4.1</p></aside>\n<p>Asset paths may also be given as hashable objects implementing an\n<code class=\"docutils literal notranslate\"><span class=\"pre\">__html__()</span></code> method. The <code class=\"docutils literal notranslate\"><span class=\"pre\">__html__()</span></code> method is typically added using the\n<a class=\"reference internal\" href=\"/ja/4.1/ref/utils/#django.utils.html.html_safe\" title=\"django.utils.html.html_safe\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">html_safe()</span></code></a> decorator. The object is responsible for\noutputting the complete HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;script&gt;</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;link&gt;</span></code> tag content:</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=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.html</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">html_safe</span>\n<span class=\"gp\">&gt;&gt;&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nd\">@html_safe</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">JSPath</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>        <span class=\"k\">return</span> <span class=\"s1\">&#39;&lt;script src=&quot;https://example.org/asset.js&quot; rel=&quot;stylesheet&quot;&gt;&#39;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">SomeWidget</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">TextInput</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Media</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>        <span class=\"n\">js</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">JSPath</span><span class=\"p\">(),)</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"media-objects\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> objects<a class=\"heading-anchor\" href=\"#media-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>ウィジェットやフォームの <code class=\"docutils literal notranslate\"><span class=\"pre\">media</span></code> 属性に応答指令信号を送ると、<code class=\"docutils literal notranslate\"><span class=\"pre\">forms.Media</span></code> オブジェクトが戻り値となります。すでに見たように、<code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> オブジェクトの文字列表現は HTMLで、HTML ページ内の <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;head&gt;</span></code> ブロックに関連ファイルを含める必要があります。</p>\n<p>ただし、<code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> オブジェクトにはいくつかの面白いプロパティが存在します。</p>\n<section id=\"subsets-of-assets\">\n<h3>アセットのサブセット<a class=\"heading-anchor\" href=\"#subsets-of-assets\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>特定のタイプのファイルのみ必要な場合、サブスクリプトオペレーターを使って使用するメディアをフィルタできます。例えば:</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=\"n\">w</span> <span class=\"o\">=</span> <span class=\"n\">CalendarWidget</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">w</span><span class=\"o\">.</span><span class=\"n\">media</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;link href=&quot;http://static.example.com/pretty.css&quot; media=&quot;all&quot; rel=&quot;stylesheet&quot;&gt;</span>\n<span class=\"go\">&lt;script src=&quot;http://static.example.com/animations.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script 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><span class=\"n\">w</span><span class=\"o\">.</span><span class=\"n\">media</span><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; media=&quot;all&quot; rel=&quot;stylesheet&quot;&gt;</span>\n</code></pre></div>\n<p>サブスクリプトオペレーターを使用すると、新たな <code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> オブジェクトが戻り値となります -- 使用するメディアのみが含まれています。</p>\n</section>\n<section id=\"combining-media-objects\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> オブジェクトを結合する<a class=\"heading-anchor\" href=\"#combining-media-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> オブジェクトを複数使用することもできます。2 つの <code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> が追加されると、両方で指定されたアセットを結合したものを含む <code class=\"docutils literal notranslate\"><span class=\"pre\">Media</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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">CalendarWidget</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">TextInput</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Media</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>        <span class=\"n\">css</span> <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>        <span class=\"n\">js</span> <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=\"w\"> </span><span class=\"nc\">OtherWidget</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">TextInput</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Media</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>        <span class=\"n\">js</span> <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><span class=\"n\">w1</span> <span class=\"o\">=</span> <span class=\"n\">CalendarWidget</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">w2</span> <span class=\"o\">=</span> <span class=\"n\">OtherWidget</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">w1</span><span class=\"o\">.</span><span class=\"n\">media</span> <span class=\"o\">+</span> <span class=\"n\">w2</span><span class=\"o\">.</span><span class=\"n\">media</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;link href=&quot;http://static.example.com/pretty.css&quot; media=&quot;all&quot; rel=&quot;stylesheet&quot;&gt;</span>\n<span class=\"go\">&lt;script src=&quot;http://static.example.com/animations.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;http://static.example.com/actions.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;http://static.example.com/whizbang.js&quot;&gt;&lt;/script&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"order-of-assets\">\n<span id=\"form-media-asset-order\"></span><h3>アセットの順序<a class=\"heading-anchor\" href=\"#order-of-assets\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>DOM に挿入されるアセットの順序が重要になることがあります。例えば、jQuery に依存したスクリプトがあるかもしれません。したがって、結合した <code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> オブジェクトは、各 <code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> クラス内で定義された順序を保持します。</p>\n<p>例:</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=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">CalendarWidget</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">TextInput</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Media</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>        <span class=\"n\">js</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;jQuery.js&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;calendar.js&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;noConflict.js&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">TimeWidget</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">TextInput</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Media</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>        <span class=\"n\">js</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;jQuery.js&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;time.js&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;noConflict.js&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">w1</span> <span class=\"o\">=</span> <span class=\"n\">CalendarWidget</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">w2</span> <span class=\"o\">=</span> <span class=\"n\">TimeWidget</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">w1</span><span class=\"o\">.</span><span class=\"n\">media</span> <span class=\"o\">+</span> <span class=\"n\">w2</span><span class=\"o\">.</span><span class=\"n\">media</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;script src=&quot;http://static.example.com/jQuery.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;http://static.example.com/calendar.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;http://static.example.com/time.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;http://static.example.com/noConflict.js&quot;&gt;&lt;/script&gt;</span>\n</code></pre></div>\n<p>順序が矛盾した <code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> オブジェクトを結合すると <code class=\"docutils literal notranslate\"><span class=\"pre\">MediaOrderConflictWarning</span></code> となります。</p>\n</section>\n</section>\n<section id=\"media-on-forms\">\n<h2>フォームの <code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code><a class=\"heading-anchor\" href=\"#media-on-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>ウィジェットだけでなく、フォームにも <code class=\"docutils literal notranslate\"><span class=\"pre\">media</span></code> の定義を行うことができます。フォーム上での <code class=\"docutils literal notranslate\"><span class=\"pre\">media</span></code> 定義のルールはウィジェットと同じです: 宣言は定数および動的に行えます; パスと継承についてのルールもまったく同じです。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">media</span></code> 宣言を定義したかどうかに関わらず、<em>すべての</em> Form オブジェクトは <code class=\"docutils literal notranslate\"><span class=\"pre\">media</span></code> プロパティを持ちます。デフォルト値は、フォームを構成するすべてのウィジェットに対する <code class=\"docutils literal notranslate\"><span class=\"pre\">media</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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"n\">date</span> <span class=\"o\">=</span> <span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">widget</span><span class=\"o\">=</span><span class=\"n\">CalendarWidget</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"n\">widget</span><span class=\"o\">=</span><span class=\"n\">OtherWidget</span><span class=\"p\">)</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">media</span>\n<span class=\"go\">&lt;link href=&quot;http://static.example.com/pretty.css&quot; media=&quot;all&quot; rel=&quot;stylesheet&quot;&gt;</span>\n<span class=\"go\">&lt;script src=&quot;http://static.example.com/animations.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;http://static.example.com/actions.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;http://static.example.com/whizbang.js&quot;&gt;&lt;/script&gt;</span>\n</code></pre></div>\n<p>If you want to associate additional assets with a form -- for example,\nCSS for form layout -- add a <code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> declaration to the form:</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=\"w\"> </span><span class=\"nc\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"n\">date</span> <span class=\"o\">=</span> <span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">widget</span><span class=\"o\">=</span><span class=\"n\">CalendarWidget</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"n\">widget</span><span class=\"o\">=</span><span class=\"n\">OtherWidget</span><span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">... </span>    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Media</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>        <span class=\"n\">css</span> <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><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">media</span>\n<span class=\"go\">&lt;link href=&quot;http://static.example.com/pretty.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; media=&quot;all&quot; rel=&quot;stylesheet&quot;&gt;</span>\n<span class=\"go\">&lt;script src=&quot;http://static.example.com/animations.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;http://static.example.com/actions.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script 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":"定数として定義されたアセット","anchor":"assets-as-a-static-definition","children":[{"title":"css","anchor":"css","children":[]},{"title":"js","anchor":"js","children":[]},{"title":"extend","anchor":"extend","children":[]}]},{"title":"動的プロパティとしての Media","anchor":"media-as-a-dynamic-property","children":[]},{"title":"アセット定義内のパス","anchor":"paths-in-asset-definitions","children":[{"title":"Paths as strings","anchor":"paths-as-strings","children":[]},{"title":"Paths as objects","anchor":"paths-as-objects","children":[]}]},{"title":"Media objects","anchor":"media-objects","children":[{"title":"アセットのサブセット","anchor":"subsets-of-assets","children":[]},{"title":"Media オブジェクトを結合する","anchor":"combining-media-objects","children":[]},{"title":"アセットの順序","anchor":"order-of-assets","children":[]}]},{"title":"フォームの Media","anchor":"media-on-forms","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Django を使う","url":"/ja/4.1/topics/"},{"docname":"topics/forms/index","title":"フォームを使う","url":"/ja/4.1/topics/forms/"}],"prev":{"docname":"topics/forms/modelforms","title":"モデルからフォームを作成する","url":"/ja/4.1/topics/forms/modelforms/"},"next":{"docname":"topics/templates","title":"テンプレート","url":"/ja/4.1/topics/templates/"},"formats":{"html":"/ja/4.1/topics/forms/media/","markdown":"/ja/4.1/topics/forms/media.md","json":"/ja/4.1/topics/forms/media.json"},"source":"https://github.com/django/django/blob/stable/4.1.x/docs/topics/forms/media.txt","official":"https://docs.djangoproject.com/ja/4.1/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","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}