{"title":"フォームアセット (Media クラス)","version":"6.0","locale":"ja","docname":"topics/forms/media","url":"/ja/6.0/topics/forms/media/","canonical":"https://djangodocs.dev/ja/6.0/topics/forms/media/","summary":"魅力的で使いやすいウェブのフォームを作るには、HTML だけでは不十分です。CSS スタイルシートも必要です。さらに豪華なウィジェットを使いたければ、JavaScript を各ページに配置する必要もあるでしょう。あるページに必要な CSS と JavaScript…","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>魅力的で使いやすいウェブのフォームを作るには、HTML だけでは不十分です。CSS スタイルシートも必要です。さらに豪華なウィジェットを使いたければ、JavaScript を各ページに配置する必要もあるでしょう。あるページに必要な CSS と JavaScript の組み合わせは、そのページに使用されるウィジェットによって異なります。</p>\n<p>ここでアセット定義の出番です。Django では異なるファイル（例えばスタイルシートとスクリプト）を、これらを必要とするフォームおよびウィジェットと結びつけることができます。例として、DateFields を描画するのにカレンダーを使いたい場合、独自の Calendar ウィジェットを定義したとき、このウィジェットは CSS や JavaScript と紐付けることができます。フォーム上でこの Calendar ウィジェットを使用するとき、Django は必要な CSS および JavaScript のファイルを特定し、Web ページ上で参照できるよう、フォーム内にファイル名のリストを生成します。</p>\n<aside class=\"admonition-assets-and-django-admin admonition\">\n<p class=\"admonition-title\">アセットと Django Admin</p>\n<p>Django Admin アプリケーションでは、カレンダーやフィルタリング選択など、いくつ かのカスタマイズされたウィジェットが定義されています。これらのウィジェットはアセット要件を定義し、 Django Admin は Django のデフォルトの代わりにカスタムウィジェットを使います。Admin テンプレートは、任意のページでウィジェットをレンダリングするのに必要なファイルだけを含めます。</p>\n<p>Django Admin アプリケーションが使っているウィジェットが気に入ったら、ご自分の アプリケーションで自由に使ってください！これらは全て <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\">どの JavaScript ツールキットを使えばいいの？</p>\n<p>多くの JavaScript ツールキットが存在し、その多くにはウィジェット (カレンダ ーウィジェットなど) が含まれていて、アプリケーションの拡張に利用できます。Django は、意図的に一つの JavaScript ツールキットだけを使うことを避けています。それぞれのツールキットには、相対的な長所と短所があります。Django はどんな JavaScript ツールキットとも統合できます。</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\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=\"s2\">&quot;all&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;pretty.css&quot;</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=\"s2\">&quot;animations.js&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;actions.js&quot;</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=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console 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;https://static.example.com/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.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;https://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=\"s2\">&quot;screen&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;pretty.css&quot;</span><span class=\"p\">],</span>\n        <span class=\"s2\">&quot;print&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;newspaper.css&quot;</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=\"s2\">&quot;screen&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;pretty.css&quot;</span><span class=\"p\">],</span>\n        <span class=\"s2\">&quot;tv,projector&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;lo_res.css&quot;</span><span class=\"p\">],</span>\n        <span class=\"s2\">&quot;print&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;newspaper.css&quot;</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=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">link</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;https://static.example.com/pretty.css&quot;</span> <span class=\"na\">media</span><span class=\"o\">=</span><span class=\"s\">&quot;screen&quot;</span> <span class=\"na\">rel</span><span class=\"o\">=</span><span class=\"s\">&quot;stylesheet&quot;</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">link</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;https://static.example.com/lo_res.css&quot;</span> <span class=\"na\">media</span><span class=\"o\">=</span><span class=\"s\">&quot;tv,projector&quot;</span> <span class=\"na\">rel</span><span class=\"o\">=</span><span class=\"s\">&quot;stylesheet&quot;</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">link</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;https://static.example.com/newspaper.css&quot;</span> <span class=\"na\">media</span><span class=\"o\">=</span><span class=\"s\">&quot;print&quot;</span> <span class=\"na\">rel</span><span class=\"o\">=</span><span class=\"s\">&quot;stylesheet&quot;</span><span class=\"p\">&gt;</span>\n</code></pre></div>\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 id=\"script-objects\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">Script</span></code> オブジェクト<a class=\"heading-anchor\" href=\"#script-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<aside class=\"version-note version-added\" data-version=\"5.2\">\n<p class=\"version-note-title\">New in Django 5.2</p></aside>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Script\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Script</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">src</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">attributes</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Script\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>スクリプトファイルを表現します。</p>\n<p>最初の引数 <code class=\"docutils literal notranslate\"><span class=\"pre\">src</span></code> は、スクリプトファイルへのパスを表す文字列です。 このパスの指定方法については、 <a class=\"reference internal\" href=\"#form-asset-paths\"><span class=\"std std-ref\">パスの指定に関するセクション</span></a> を参照してください。</p>\n<p>任意のキーワード引数 <code class=\"docutils literal notranslate\"><span class=\"pre\">**attributes</span></code> は、生成される <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;script&gt;</span></code> タグに設定される HTML 属性です。</p>\n<p>使用例については、<a class=\"reference internal\" href=\"#form-media-asset-objects\"><span class=\"std std-ref\">オブジェクトとしてのパス</span></a> を参照してください。</p>\n</dd></dl>\n\n</section>\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> 定義を使用しているオブジェクトは、親ウィジェットに関連するすべてのアセットを継承します。これは、親ウィジェットが自身の要件をどのように定義しているかによりません。例えば、上の例の基本的なカレンダーウィジェットを拡張するとします:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console 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=\"s2\">&quot;all&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;fancy.css&quot;</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=\"s2\">&quot;whizbang.js&quot;</span><span class=\"p\">]</span>\n<span class=\"gp\">...</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;https://static.example.com/pretty.css&quot; media=&quot;all&quot; rel=&quot;stylesheet&quot;&gt;</span>\n<span class=\"go\">&lt;link href=&quot;https://static.example.com/fancy.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.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;https://static.example.com/actions.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;https://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\">Media</span></code> の宣言に <code class=\"docutils literal notranslate\"><span class=\"pre\">extend=False</span></code> 宣言を追加してください:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console 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=\"s2\">&quot;all&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;fancy.css&quot;</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=\"s2\">&quot;whizbang.js&quot;</span><span class=\"p\">]</span>\n<span class=\"gp\">...</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;https://static.example.com/fancy.css&quot; media=&quot;all&quot; rel=&quot;stylesheet&quot;&gt;</span>\n<span class=\"go\">&lt;script src=&quot;https://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>If you need to perform some more sophisticated manipulation of asset\nrequirements, you can define the <code class=\"docutils literal notranslate\"><span class=\"pre\">media</span></code> property directly. This is\ndone by defining a widget property that returns an instance of\n<code class=\"docutils literal notranslate\"><span class=\"pre\">forms.Media</span></code>. The constructor for <code class=\"docutils literal notranslate\"><span class=\"pre\">forms.Media</span></code> accepts <code class=\"docutils literal notranslate\"><span class=\"pre\">css</span></code>\nand <code class=\"docutils literal notranslate\"><span class=\"pre\">js</span></code> keyword arguments in the same format as that used in a\nstatic media definition.</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>\n            <span class=\"n\">css</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;all&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;pretty.css&quot;</span><span class=\"p\">]},</span> <span class=\"n\">js</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;animations.js&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;actions.js&quot;</span><span class=\"p\">]</span>\n        <span class=\"p\">)</span>\n</code></pre></div>\n<p>動的な <code class=\"docutils literal notranslate\"><span class=\"pre\">media</span></code> プロパティに対する戻り値を構成する方法については、 <a class=\"reference internal\" href=\"#media-objects\">Media objects</a> を参照してください。</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>文字列のパス<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>アセットを指定する文字列パスは相対パスと絶対パスがあります。パスが <code class=\"docutils literal notranslate\"><span class=\"pre\">/</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">http://</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">https://</span></code> で始まる場合、絶対パスとして解釈され、そのまま残されます。それ以外のパスは適切なプレフィックスの値が先頭に付加されます。 <a class=\"reference internal\" href=\"/ja/6.0/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> アプリがインストールされている場合、アセットを配信するために使用されます。</p>\n<p><a class=\"reference internal\" href=\"/ja/6.0/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> を使うかどうかに関わらず、ウェブページを完全に表示するために <a class=\"reference internal\" href=\"/ja/6.0/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/6.0/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/6.0/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/6.0/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/6.0/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\">'https://uploads.example.com/'</span></code> で、<a class=\"reference internal\" href=\"/ja/6.0/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=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console 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=\"s2\">&quot;all&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;/css/pretty.css&quot;</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=\"s2\">&quot;animations.js&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;https://othersite.com/actions.js&quot;</span><span class=\"p\">]</span>\n<span class=\"gp\">...</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;https://uploads.example.com/animations.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;https://othersite.com/actions.js&quot;&gt;&lt;/script&gt;</span>\n</code></pre></div>\n<p>しかし、<a class=\"reference internal\" href=\"/ja/6.0/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\">'https://static.example.com/'</span></code> の場合は、次のようになります。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console 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.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;https://othersite.com/actions.js&quot;&gt;&lt;/script&gt;</span>\n</code></pre></div>\n<p>または <a class=\"reference internal\" href=\"/ja/6.0/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/6.0/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=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console 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;https://othersite.com/actions.js&quot;&gt;&lt;/script&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"paths-as-objects\">\n<span id=\"form-media-asset-objects\"></span><h3>オブジェクトとしてのパス<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<p>アセットは <a class=\"reference internal\" href=\"#django.forms.Script\" title=\"django.forms.Script\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Script</span></code></a> を使ってオブジェクトベースで指定することもできます。この方法では、カスタムの 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=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Media</span><span class=\"p\">:</span>\n    <span class=\"n\">js</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"n\">Script</span><span class=\"p\">(</span>\n            <span class=\"s2\">&quot;https://cdn.example.com/something.min.js&quot;</span><span class=\"p\">,</span>\n            <span class=\"o\">**</span><span class=\"p\">{</span>\n                <span class=\"s2\">&quot;crossorigin&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;anonymous&quot;</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;async&quot;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"p\">},</span>\n        <span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>この <code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> 定義をレンダリングすると、次のような HTML になります：</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">script</span> <span class=\"na\">src</span><span class=\"o\">=</span><span class=\"s\">&quot;https://cdn.example.com/something.min.js&quot;</span>\n        <span class=\"na\">crossorigin</span><span class=\"o\">=</span><span class=\"s\">&quot;anonymous&quot;</span>\n        <span class=\"na\">async</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">script</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"5.2\">\n<p class=\"version-note-title\">Changed in Django 5.2</p><p>オブジェクトクラス <code class=\"docutils literal notranslate\"><span class=\"pre\">Script</span></code> が追加されました。</p>\n</aside>\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=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console 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;https://static.example.com/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.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;https://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=\"s2\">&quot;css&quot;</span><span class=\"p\">])</span>\n<span class=\"go\">&lt;link href=&quot;https://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=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console 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=\"s2\">&quot;all&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;pretty.css&quot;</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=\"s2\">&quot;animations.js&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;actions.js&quot;</span><span class=\"p\">]</span>\n<span class=\"gp\">...</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=\"s2\">&quot;whizbang.js&quot;</span><span class=\"p\">]</span>\n<span class=\"gp\">...</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;https://static.example.com/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.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;https://static.example.com/actions.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;https://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=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console 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=\"s2\">&quot;jQuery.js&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;calendar.js&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;noConflict.js&quot;</span><span class=\"p\">]</span>\n<span class=\"gp\">...</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=\"s2\">&quot;jQuery.js&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;time.js&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;noConflict.js&quot;</span><span class=\"p\">]</span>\n<span class=\"gp\">...</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;https://static.example.com/jQuery.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;https://static.example.com/calendar.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;https://static.example.com/time.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;https://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> 宣言を定義しているかどうかに関わらず、すべてのフォームオブジェクトは <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=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console 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<span class=\"gp\">...</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;https://static.example.com/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.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;https://static.example.com/actions.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;https://static.example.com/whizbang.js&quot;&gt;&lt;/script&gt;</span>\n</code></pre></div>\n<p>フォームレイアウト用のCSSなど、フォームに追加のアセットを関連付けたい場合は、フォームに <code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> 宣言を追加します:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console 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>    <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=\"s2\">&quot;all&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;layout.css&quot;</span><span class=\"p\">],</span>\n<span class=\"gp\">... </span>        <span class=\"p\">}</span>\n<span class=\"gp\">...</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;https://static.example.com/pretty.css&quot; media=&quot;all&quot; rel=&quot;stylesheet&quot;&gt;</span>\n<span class=\"go\">&lt;link href=&quot;https://static.example.com/layout.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.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;https://static.example.com/actions.js&quot;&gt;&lt;/script&gt;</span>\n<span class=\"go\">&lt;script src=&quot;https://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":"Script オブジェクト","anchor":"script-objects","children":[]}]},{"title":"extend","anchor":"extend","children":[]}]},{"title":"動的プロパティとしての Media","anchor":"media-as-a-dynamic-property","children":[]},{"title":"アセット定義内のパス","anchor":"paths-in-asset-definitions","children":[{"title":"文字列のパス","anchor":"paths-as-strings","children":[]},{"title":"オブジェクトとしてのパス","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/6.0/topics/"},{"docname":"topics/forms/index","title":"フォームを使う","url":"/ja/6.0/topics/forms/"}],"prev":{"docname":"topics/forms/modelforms","title":"モデルからフォームを作成する","url":"/ja/6.0/topics/forms/modelforms/"},"next":{"docname":"topics/templates","title":"テンプレート","url":"/ja/6.0/topics/templates/"},"formats":{"html":"/ja/6.0/topics/forms/media/","markdown":"/ja/6.0/topics/forms/media.md","json":"/ja/6.0/topics/forms/media.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/topics/forms/media.txt","official":"https://docs.djangoproject.com/ja/6.0/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","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}