{"title":"フォームを使う","version":"1.11","locale":"ja","docname":"topics/forms/index","url":"/ja/1.11/topics/forms/","canonical":"https://djangodocs.dev/ja/1.11/topics/forms/","summary":"あなたの作ろうとしているウェブサイトやアプリケーションが、単にコンテンツを公開したり訪問者からのインプットを受け付けないサイトでない限り、フォームを理解し利…","html":"<h1>フォームを使う<a class=\"heading-anchor\" href=\"#working-with-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<aside class=\"admonition-about-this-document admonition\" role=\"note\">\n<p class=\"admonition-title\">このドキュメントについて</p>\n<p>このドキュメントでは、Web フォームの基本と、それらを Django で扱う方法を紹介しています。より詳しく知りたいときは、フォーム API の特定の領域、 <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/api/\"><span class=\"doc\">フォーム API</span></a> 、 <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/fields/\"><span class=\"doc\">Form fields</span></a> または <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/validation/\"><span class=\"doc\">フォームとフィールドの検証</span></a> をご覧ください。</p>\n</aside>\n<p>あなたの作ろうとしているウェブサイトやアプリケーションが、単にコンテンツを公開したり訪問者からのインプットを受け付けないサイトでない限り、フォームを理解し利用する必要があります。</p>\n<p>Django はフォームの構築を助けるさまざまなツールやライブラリを提供しています。これらを利用することで、サイト訪問者からデータの入力を受け入れ、そのデータを処理したあと、入力に応じたレスポンスを返すことができるようになります。</p>\n<section id=\"html-forms\">\n<h2>HTML フォーム<a class=\"heading-anchor\" href=\"#html-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>HTMLでは、フォームは <code class=\"docutils literal notranslate\">&lt;form&gt;...&lt;/form&gt;</code> 内の要素の集まりで、訪問者によるテキスト入力、オプション選択、オブジェクトやコントロールの操作などを可能にし、これらの情報をサーバーに送り返します。</p>\n<p>いくつかのフォームインターフェイスの要素、例えばテキストインプットやチェックボックスは、とてもシンプルで HTML 自体に組み込まれています。そのほかに、とても複雑な要素もあります; Date ピッカーをポップアップさせたり、スライダーを動かしコントロールを操作するようなインターフェイスは、一般的に HTML フォームの  <code class=\"docutils literal notranslate\">&lt;input&gt;</code> 要素だけではなく JavaScriptと CSS を使って実現されます。</p>\n<p>As well as its <code class=\"docutils literal notranslate\">&lt;input&gt;</code> elements, a form must specify two things:</p>\n<ul class=\"simple\">\n<li><p><em>どこで</em>: ユーザーのインプットに対応するデータの宛先となるべきURL</p></li>\n<li><p><em>どのように</em>: データが返される方法として使われる HTTP メソッド</p></li>\n</ul>\n<p>例として、Django admin にあるいくつかの <code class=\"docutils literal notranslate\">&lt;input&gt;</code> 要素のログインフォームを見てみましょう。ユーザー名のための <code class=\"docutils literal notranslate\">type=&quot;text&quot;</code> 、パスワードのための <code class=\"docutils literal notranslate\">type=&quot;password&quot;</code>、そしてログインボタンのための <code class=\"docutils literal notranslate\">type=&quot;submit&quot;</code> があります。他にも Django が次の行動を決めるために使われる、ユーザーからは見えない隠しテキストフィールドもあります。</p>\n<p>また、フォームのデータが <code class=\"docutils literal notranslate\">&lt;form&gt;</code> の <code class=\"docutils literal notranslate\">action</code> 属性によって指定された URL - <code class=\"docutils literal notranslate\">/admin/</code> - に送信されるべきこと、そして <code class=\"docutils literal notranslate\">method</code> 属性によって指定されたHTTP メカニズム - <code class=\"docutils literal notranslate\">post</code> - を使って送信されるべきこともブラウザーに伝えています。</p>\n<p><code class=\"docutils literal notranslate\">&lt;input type=&quot;submit&quot; value=&quot;Log in&quot;&gt;</code> 要素がトリガーされると、データは <code class=\"docutils literal notranslate\">/admin/</code> に返されます。</p>\n<section id=\"get-and-post\">\n<h3><code class=\"docutils literal notranslate\">GET</code> と <code class=\"docutils literal notranslate\">POST</code><a class=\"heading-anchor\" href=\"#get-and-post\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>フォームを扱うときに使用する HTTP メソッドは、<code class=\"docutils literal notranslate\">GET</code> と <code class=\"docutils literal notranslate\">POST</code> だけです。</p>\n<p>Django のログインフォームは、<code class=\"docutils literal notranslate\">POST</code> メソッドを使って返されます。この中で、ブラウザがフォームデータをひとまとめにし、送信用にエンコードし、サーバーに送った上で、サーバーからの応答を受け取ります。</p>\n<p><code class=\"docutils literal notranslate\">GET</code> は、対照的に、送信されたデータを文字列に添付し、URL を構成するために使います。URL はデータが送られるべきアドレスのほか、データキーと値を含みます。実際に、Django ドキュメンテーションで何かを検索してみると、フォーム <code class=\"docutils literal notranslate\">https://docs.djangoproject.com/search/?q=forms&amp;release=1</code> といった URL が生成されるのが分かるでしょう。</p>\n<p><code class=\"docutils literal notranslate\">GET</code> と <code class=\"docutils literal notranslate\">POST</code> は、一般的には異なる目的に使われます。</p>\n<p>システムの状態を変更する可能性のあるあらゆるリクエスト - 例えばデータベース内での変更を行うリクエスト - では <code class=\"docutils literal notranslate\">POST</code> を使うべきです。 <code class=\"docutils literal notranslate\">GET</code> は、システムの状態に影響を与えないリクエストのみに使われるべきです。</p>\n<p><code class=\"docutils literal notranslate\">GET</code> はパスワードフォームには不適です。なぜならば、パスワードが URL 内はもちろんのこと、ブラウザーの履歴やサーバーログといったプレーンテキストの中すべてに表示されるからです。大量のデータや、画像のようなバイナリデータにも不適です。<code class=\"docutils literal notranslate\">GET</code> リクエストを admin フォームのために使ような Web アプリケーションは、セキュリティ上のリスクです: 攻撃者がシステムの繊細な部分へのアクセス権を得るために、フォームのリクエストを偽装することは簡単なのです。Django の <a class=\"reference internal\" href=\"/ja/1.11/ref/csrf/\"><span class=\"doc\">CSRF 保護</span></a> のような他の保護と組み合わされた <code class=\"docutils literal notranslate\">POST</code> は、アクセスをより適切にコントロールできるようにします。</p>\n<p>一方で、 <code class=\"docutils literal notranslate\">GET</code> は Web 検索フォームのようなものに適しています。なぜならば、 <code class=\"docutils literal notranslate\">GET</code> リクエストを表現している URL は、簡単にブックマーク、共有、再送信ができるからです。</p>\n</section>\n</section>\n<section id=\"django-s-role-in-forms\">\n<h2>フォームにおける Django の役割<a class=\"heading-anchor\" href=\"#django-s-role-in-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>フォームを扱うのは大変な仕事です。Django admin を考えてみると、複数の異なるタイプのデータの、たくさんのアイテムがフォーム内に表示されるために準備を必要とし、HTML としてレンダリングされ、便利なインターフェイスを使って編集され、サーバーに返され、検証され、クリーンアップされます。そして、保存されたり次の処理のために値が渡されたりするのです。</p>\n<p>Django のフォーム機能は、この仕事のうち膨大な部分を簡素化・自動化します。そしてさらに、多くのプログラマーたちが自分自身でコードを書くよりも安全にこれらを実現します。</p>\n<p>Django は、フォームに含まれる仕事のうち、3つのまったく異なるパーツを扱います:</p>\n<ul class=\"simple\">\n<li><p>データがレンダリングできるように準備し、再構成すること</p></li>\n<li><p>データのために HTML フォームを生成すること</p></li>\n<li><p>クライアントから送信されたフォームとデータを受け取り、処理すること</p></li>\n</ul>\n<p>これら全ては手動でコードに書くことが <em>できます</em> が、Django がこれらすべてをうまく処理します。</p>\n</section>\n<section id=\"forms-in-django\">\n<h2>Django におけるフォーム<a class=\"heading-anchor\" href=\"#forms-in-django\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>HTML フォームについては簡単に説明しましたが、HTML <code class=\"docutils literal notranslate\">&lt;form&gt;</code> は必要となる仕掛けの一部分に過ぎません。</p>\n<p>Web アプリケーションの文脈では、 'form' は HTML <code class=\"docutils literal notranslate\">&lt;form&gt;</code> 、それを提供する Django の <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\">Form</code></a> 、データが送信されたときに返された体系化されたデータ、もしくは端末総合間で動くこれらパーツの集合を意味するかもしれません。</p>\n<section id=\"the-django-form-class\">\n<h3>Django の <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\">Form</code></a> クラス<a class=\"heading-anchor\" href=\"#the-django-form-class\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>このコンポーネントシステムの中心は、Django の <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\">Form</code></a> クラスです。 Django モデルがオブジェクトの論理構造、その動作、そしてその部分が私たちに表現される方法を記述するのと同じように、 <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\">Form</code></a> クラスはフォームを記述し、それがどのように動作し表示されるかを決定します。</p>\n<p>モデルクラスのフィールドがデータベースのフィールドに対応するのと同じように、フォームクラスのフィールドは HTML フォームの <code class=\"docutils literal notranslate\">&lt;input&gt;</code> 要素に対応します。 (<a class=\"reference internal\" href=\"/ja/1.11/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\">ModelForm</code></a> はモデルクラスのフィールドと HTML フォームの <code class=\"docutils literal notranslate\">&lt;input&gt;</code> 要素を、<a class=\"reference internal\" href=\"/ja/1.11/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\">Form</code></a> を通じて対応させます; これは Django amin が基づくものです)</p>\n<p>フォームのフィールド自体はクラスです; フォームが送信されたとき、フォームデータを管理し、検証を実施します。 <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/fields/#django.forms.DateField\" title=\"django.forms.DateField\"><code class=\"xref py py-class docutils literal notranslate\">DateField</code></a> と <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/fields/#django.forms.FileField\" title=\"django.forms.FileField\"><code class=\"xref py py-class docutils literal notranslate\">FileField</code></a> は、非常に異なる種類のデータを扱い、異なることをしなければなりません。</p>\n<p>フォームフィールドは、HTML &quot;ウィジェット” - ユーザーインターフェイスの装置の一つです - としてブラウザ内のユーザーに表されます。それぞれのフィールドタイプは、適切なデフォルトの <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/widgets/\"><span class=\"doc\">Widget class</span></a> を持っていますが、これらは必要に応じてオーバーライドできます。</p>\n</section>\n<section id=\"instantiating-processing-and-rendering-forms\">\n<h3>フォームをインスタンス化し、処理し、レンダリングする<a class=\"heading-anchor\" href=\"#instantiating-processing-and-rendering-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django でオブジェクトをレンダリングするとき、通常は次のような手順を取ります。</p>\n<ol class=\"arabic simple\">\n<li><p>ビューの中でオブジェクトを取得する (例えば、データベースからオブジェクトを取得する)</p></li>\n<li><p>オブジェクトをテンプレートのコンテクストに引き渡す</p></li>\n<li><p>テンプレートの変数を使って、オブジェクトを HTML マークアップに展開する</p></li>\n</ol>\n<p>テンプレートの中でフォームをレンダリングすることは、他のあらゆる種類のオブジェクトをレンダリングする働きとほとんど同じですが、いくつかの重要な違いがあります。</p>\n<p>データを持たないモデルインスタンスのケースでは、テンプレート内で何かをするのが有益であることはほとんどありません。一方、未入力のフォームをレンダリングすることはまったく合理的です - これは、ユーザーに入力してほしいときに行うことです。</p>\n<p>したがって、ビューの中でモデルインスタンスを扱うときには、一般的にデータベースから取り出します。フォームを処理するときには、一般的にビューの中でインスタンス化します。</p>\n<p>フォームをインスタンス化するときは、空のままにするかあらかじめ入力しておくことができます。たとえば:</p>\n<ul class=\"simple\">\n<li><p>保存されたモデルインスタンスからのデータ (編集のための admin フォームの場合のように)</p></li>\n<li><p>他のソースから照合したデータ</p></li>\n<li><p>前回の HTML フォーム送信から受信したデータ</p></li>\n</ul>\n<p>最後のケースが最も興味深いです。なぜならば、それはユーザーが単にウェブサイトを見るだけでなく、情報を送り返すことができるようにするからです。</p>\n</section>\n</section>\n<section id=\"building-a-form\">\n<h2>フォームを作る<a class=\"heading-anchor\" href=\"#building-a-form\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"the-work-that-needs-to-be-done\">\n<h3>すべきこと<a class=\"heading-anchor\" href=\"#the-work-that-needs-to-be-done\"><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=\"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\">form</span> <span class=\"na\">action</span><span class=\"o\">=</span><span class=\"s\">&quot;/your-name/&quot;</span> <span class=\"na\">method</span><span class=\"o\">=</span><span class=\"s\">&quot;post&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;your_name&quot;</span><span class=\"p\">&gt;</span>Your name: <span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;your_name&quot;</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;text&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;your_name&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">current_name</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;submit&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;OK&quot;</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">form</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>これは、<code class=\"docutils literal notranslate\">POST</code> メソッドを使って、URL <code class=\"docutils literal notranslate\">/your-name/</code> にフォームデータを返すよう、ブラウザに通知します。テキストフィールド、&quot;Your name:&quot; ラベル、そして &quot;OK&quot; ボタンを表示します。テンプレートのコンテクストが <code class=\"docutils literal notranslate\">current_name</code> 変数を含む場合は、 <code class=\"docutils literal notranslate\">your_name</code> フィールドをあらかじめ入力するために使われます。</p>\n<p>HTML フォームを含むテンプレートをレンダリングし、 <code class=\"docutils literal notranslate\">current_name</code> フィールドを適切に提供するビューが必要になります。</p>\n<p>フォームが送信されるとき、サーバーに送信される <code class=\"docutils literal notranslate\">POST</code> リクエストは、フォームのデータを含みます。</p>\n<p>今度は、その <code class=\"docutils literal notranslate\">/your-name/</code> URL と対応するビューも必要です。このURLは、リクエストの中から適切なキー/値のペアを見つけ、それらを処理します。</p>\n<p>これは非常にシンプルなフォームです。実践では、1つのフォームが数十または数百のフィールドを含んでいて、しかも多くがあらかじめ入力されている必要があるかもしれません。また、操作が完了する前にユーザーが何回も編集と送信を繰り返すことも考えられます。</p>\n<p>フォームが送信される前でさえ、ブラウザでいくつかの検証が必要となるかもしれません; ユーザーがカレンダーから日付を選ぶといったような、より複雑なフィールドを使いたくなるかもしれません。</p>\n<p>現段階では、Django にこうした仕事をさせるのがとても簡単です。</p>\n</section>\n<section id=\"building-a-form-in-django\">\n<h3>Django でフォームを作る<a class=\"heading-anchor\" href=\"#building-a-form-in-django\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"the-form-class\">\n<h4><a class=\"reference internal\" href=\"/ja/1.11/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\">Form</code></a> クラス<a class=\"heading-anchor\" href=\"#the-form-class\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>HTML フォームをどのように見せたいかは、すでに分かっています。Django で実現するためのスタート地点は以下の通りです:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"default\"><figcaption class=\"code-block-caption\"><code>forms.py</code></figcaption><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=\"forms.py\"><code><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n\n<span class=\"k\">class</span> <span class=\"nc\">NameForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n    your_name <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">(</span>label<span class=\"o\">=</span><span class=\"s1\">&#39;Your name&#39;</span><span class=\"p\">,</span> max_length<span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n</code></pre></figure>\n<p>これは、単一のフィールド (<code class=\"docutils literal notranslate\">your_name</code>) で <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\">Form</code></a> クラスを定義します。人間に優しいラベルをフィールドに適用済みで、このラベルはレンダリングされたときに <code class=\"docutils literal notranslate\">&lt;label&gt;</code> のなかに表示されます (このケースでは、仮にラベルの指定を省略したとしても、実際には指定した <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/fields/#django.forms.Field.label\" title=\"django.forms.Field.label\"><code class=\"xref py py-attr docutils literal notranslate\">label</code></a> が自動的に生成されるラベルと同じではありますが)。</p>\n<p>フィールドの最大文字数は <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/fields/#django.forms.CharField.max_length\" title=\"django.forms.CharField.max_length\"><code class=\"xref py py-attr docutils literal notranslate\">max_length</code></a> によって定義されます。これは2つのことをします。HTML の <code class=\"docutils literal notranslate\">&lt;input&gt;</code> に maxlength=&quot;100&quot;` を配置します (そしてブラウザはユーザーがこの数値以上の文字数をそもそも入力できないようにするはずです). これはさらに、Django がブラウザからフォームを受け取ったときにデータの文字数を検証することも意味します。</p>\n<p>A <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\">Form</code></a> instance has an <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/api/#django.forms.Form.is_valid\" title=\"django.forms.Form.is_valid\"><code class=\"xref py py-meth docutils literal notranslate\">is_valid()</code></a> method, which runs\nvalidation routines for all its fields. When this method is called, if all\nfields contain valid data, it will:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">True</code> を返します</p></li>\n<li><p>フォームのデータを :attr:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>~Form.cleaned_data 属性に配置します</p></li>\n</ul>\n<p>フォーム全体は、初めてレンダリングされたとき、次のような見た目になります。</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\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;your_name&quot;</span><span class=\"p\">&gt;</span>Your name: <span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;your_name&quot;</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;text&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;your_name&quot;</span> <span class=\"na\">maxlength</span><span class=\"o\">=</span><span class=\"s\">&quot;100&quot;</span> <span class=\"na\">required</span> <span class=\"p\">/&gt;</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">&lt;form&gt;</code> や送信ボタンを含んで <strong>いない</strong> ことに注意してください。私たち自身が、これらをテンプレート内で提供する必要があります。</p>\n</section>\n<section id=\"the-view\">\n<span id=\"using-a-form-in-a-view\"></span><h4>ビュー<a class=\"heading-anchor\" href=\"#the-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Django ウェブサイトに送り返されたフォームで他は、ビューによって処理されます。通常、ビューはフォームを発行したビューと同じものです。これは、いくつかの同じロジックを再利用することを可能にします。</p>\n<p>フォームを処理するためには、フォームを発行したいと考えているURLに対して、ビューの中でインスタンス化する必要があります。</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"default\"><figcaption class=\"code-block-caption\"><code>views.py</code></figcaption><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=\"views.py\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"kn\">import</span> render\n<span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"kn\">import</span> HttpResponseRedirect\n\n<span class=\"kn\">from</span> <span class=\"nn\">.forms</span> <span class=\"kn\">import</span> NameForm\n\n<span class=\"k\">def</span> <span class=\"nf\">get_name</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"c1\"># if this is a POST request we need to process the form data</span>\n    <span class=\"k\">if</span> request<span class=\"o\">.</span>method <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"c1\"># create a form instance and populate it with data from the request:</span>\n        form <span class=\"o\">=</span> NameForm<span class=\"p\">(</span>request<span class=\"o\">.</span>POST<span class=\"p\">)</span>\n        <span class=\"c1\"># check whether it&#39;s valid:</span>\n        <span class=\"k\">if</span> form<span class=\"o\">.</span>is_valid<span class=\"p\">():</span>\n            <span class=\"c1\"># process the data in form.cleaned_data as required</span>\n            <span class=\"c1\"># ...</span>\n            <span class=\"c1\"># redirect to a new URL:</span>\n            <span class=\"k\">return</span> HttpResponseRedirect<span class=\"p\">(</span><span class=\"s1\">&#39;/thanks/&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># if a GET (or any other method) we&#39;ll create a blank form</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        form <span class=\"o\">=</span> NameForm<span class=\"p\">()</span>\n\n    <span class=\"k\">return</span> render<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"s1\">&#39;name.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> form<span class=\"p\">})</span>\n</code></pre></figure>\n<p>もし <code class=\"docutils literal notranslate\">GET</code> とともにビューにたどり着いた場合は、空のフォームインスタンスを生成し、レンダリングのためテンプレートのcontextに配置します。これは、はじめて URL を訪れたときに起こると考えられることです。</p>\n<p><code class=\"docutils literal notranslate\">POST</code> リクエストを使ってフォームが送信された場合は、ビューはもう一度フォームインスタンスを生成し、リクエストからのデータを格納します: <code class=\"docutils literal notranslate\">form = NameForm(request.POST)</code> これは &quot;フォームにデータをくくりつける&quot; と呼ばれます (そして &quot;くくりつけられた&quot; フォームとなりました)。</p>\n<p>フォームの``is_valid()`` メソッドを呼び出します; もし <code class=\"docutils literal notranslate\">True</code> でない場合、フォームとともにテンプレートに戻ります。今回はフォームはもはや空にはならない (<em>くくりつけられない</em>) ため、HTML フォームには前回送信されたデータが入力され、必要に応じて編集や修正ができます。</p>\n<p><code class=\"docutils literal notranslate\">is_valid()</code> が <code class=\"docutils literal notranslate\">True</code> の場合は、 cleaned_data` 属性で検証済みのフォームデータを見出すことができます。このデータは、データベースを更新するために使ったり、次に進むための HTTP リダイレクトをブラウザに送る前に、何らかの処理をできます。</p>\n</section>\n<section id=\"the-template\">\n<span id=\"topics-forms-index-basic-form-template\"></span><h4>テンプレート<a class=\"heading-anchor\" href=\"#the-template\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\">name.html</code> テンプレートでは、すべきことは多くありません。最もシンプルな例は次のようになります。</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\">form</span> <span class=\"na\">action</span><span class=\"o\">=</span><span class=\"s\">&quot;/your-name/&quot;</span> <span class=\"na\">method</span><span class=\"o\">=</span><span class=\"s\">&quot;post&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">csrf_token</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;submit&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;Submit&quot;</span> <span class=\"p\">/&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">form</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>すべてのフォームのフィールドと属性は、Django のテンプレート言語によって、この <code class=\"docutils literal notranslate\">{{ form }}</code> から HTML マークアップに展開されます。</p>\n<aside class=\"admonition-forms-and-cross-site-request-forgery-protection admonition\" role=\"note\">\n<p class=\"admonition-title\">フォームとクロスサイトリクエストフォージェリ保護</p>\n<p>Django は使いやすい <a class=\"reference internal\" href=\"/ja/1.11/ref/csrf/\"><span class=\"doc\">クロスサイトリクエストフォージェリに対する保護</span></a> を提供しています。有効なCSRF保護とともに <code class=\"docutils literal notranslate\">POST</code> を通じてフォームを送信するときには、上記の例にあるように <a class=\"reference internal\" href=\"/ja/1.11/ref/templates/builtins/#std-templatetag-csrf_token\"><code class=\"xref std std-ttag docutils literal notranslate\">csrf_token</code></a> テンプレートタグを使う必要があります。とは言うものの、テンプレートにおいてCSRF 保護はフォームと直接関係あるわけではないので、このドキュメントの以降の例では <a class=\"reference internal\" href=\"/ja/1.11/ref/templates/builtins/#std-templatetag-csrf_token\"><code class=\"xref std std-ttag docutils literal notranslate\">csrf_token</code></a> は省略されています。</p>\n</aside>\n<aside class=\"admonition-html5-input-types-and-browser-validation admonition\" role=\"note\">\n<p class=\"admonition-title\">HTML5 の input の種類とブラウザ検証</p>\n<p>フォームが <code class=\"xref py py-class docutils literal notranslate\">EmailField</code> もしくは何か数値のフィールドタイプを含むとき、Django は <code class=\"docutils literal notranslate\">url</code>、 <code class=\"docutils literal notranslate\">email</code>、 <code class=\"docutils literal notranslate\">number</code> という HTML5 の input タイプを使います。デフォルトでは、ブラウザはこれらのフィールドにブラウザ自身の検証を適用します。これらは Django の検証より厳密かもしれません。このような動作を無効化したいときは、 <code class=\"docutils literal notranslate\">form</code> タグの novalidate 属性をセットするか、フィールドで <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a> のような異なるウィジェットを指定してください。</p>\n</aside>\n<p>これで、Django の <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\">Form</code></a> によって記述され, ビューによって処理され、HTML <code class=\"docutils literal notranslate\">&lt;form&gt;</code> としてレンダリングされた Web フォームを動かせるようになりました。</p>\n<p>始めるために必要なことは以上ですが、フォームフレームワークはまだまだ多くのことを用意しています。上記で説明してきた基本が理解できたら、フォームシステムのほかの機能を理解し、もう少しだけ根本的な仕組みを身につける準備をするようお勧めします。</p>\n</section>\n</section>\n</section>\n<section id=\"more-about-django-form-classes\">\n<h2>More about Django <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\">Form</code></a> classes<a class=\"heading-anchor\" href=\"#more-about-django-form-classes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>All form classes are created as subclasses of <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\">django.forms.Form</code></a>,\nincluding the <a class=\"reference internal\" href=\"/ja/1.11/topics/forms/modelforms/\"><span class=\"doc\">ModelForm</span></a>, which you encounter\nin Django's admin.</p>\n<aside class=\"admonition-models-and-forms admonition\" role=\"note\">\n<p class=\"admonition-title\">モデルとフォーム</p>\n<p>In fact if your form is going to be used to directly add or edit a Django\nmodel, a <a class=\"reference internal\" href=\"/ja/1.11/topics/forms/modelforms/\"><span class=\"doc\">ModelForm</span></a> can save you a great\ndeal of time, effort, and code, because it will build a form, along with the\nappropriate fields and their attributes, from a <code class=\"docutils literal notranslate\">Model</code> class.</p>\n</aside>\n<section id=\"bound-and-unbound-form-instances\">\n<h3>Bound and unbound form instances<a class=\"heading-anchor\" href=\"#bound-and-unbound-form-instances\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>The distinction between <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/api/#ref-forms-api-bound-unbound\"><span class=\"std std-ref\">Bound and unbound forms</span></a> is important:</p>\n<ul class=\"simple\">\n<li><p>An unbound form has no data associated with it. When rendered to the user,\nit will be empty or will contain default values.</p></li>\n<li><p>A bound form has submitted data, and hence can be used to tell if that data\nis valid. If an invalid bound form is rendered, it can include inline error\nmessages telling the user what data to correct.</p></li>\n</ul>\n<p>The form's <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/api/#django.forms.Form.is_bound\" title=\"django.forms.Form.is_bound\"><code class=\"xref py py-attr docutils literal notranslate\">is_bound</code></a> attribute will tell you whether a form has\ndata bound to it or not.</p>\n</section>\n<section id=\"more-on-fields\">\n<h3>More on fields<a class=\"heading-anchor\" href=\"#more-on-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Consider a more useful form than our minimal example above, which we could use\nto implement &quot;contact me&quot; functionality on a personal website:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"default\"><figcaption class=\"code-block-caption\"><code>forms.py</code></figcaption><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=\"forms.py\"><code><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n\n<span class=\"k\">class</span> <span class=\"nc\">ContactForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n    subject <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    message <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">(</span>widget<span class=\"o\">=</span>forms<span class=\"o\">.</span>Textarea<span class=\"p\">)</span>\n    sender <span class=\"o\">=</span> forms<span class=\"o\">.</span>EmailField<span class=\"p\">()</span>\n    cc_myself <span class=\"o\">=</span> forms<span class=\"o\">.</span>BooleanField<span class=\"p\">(</span>required<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n</code></pre></figure>\n<p>Our earlier form used a single field, <code class=\"docutils literal notranslate\">your_name</code>, a <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/fields/#django.forms.CharField\" title=\"django.forms.CharField\"><code class=\"xref py py-class docutils literal notranslate\">CharField</code></a>. In\nthis case, our form has four fields: <code class=\"docutils literal notranslate\">subject</code>, <code class=\"docutils literal notranslate\">message</code>, <code class=\"docutils literal notranslate\">sender</code> and\n<code class=\"docutils literal notranslate\">cc_myself</code>. <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/fields/#django.forms.CharField\" title=\"django.forms.CharField\"><code class=\"xref py py-class docutils literal notranslate\">CharField</code></a>, <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/fields/#django.forms.EmailField\" title=\"django.forms.EmailField\"><code class=\"xref py py-class docutils literal notranslate\">EmailField</code></a> and\n<a class=\"reference internal\" href=\"/ja/1.11/ref/forms/fields/#django.forms.BooleanField\" title=\"django.forms.BooleanField\"><code class=\"xref py py-class docutils literal notranslate\">BooleanField</code></a> are just three of the available field types; a full list\ncan be found in <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/fields/\"><span class=\"doc\">Form fields</span></a>.</p>\n<section id=\"widgets\">\n<h4>ウィジェット<a class=\"heading-anchor\" href=\"#widgets\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Each form field has a corresponding <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/widgets/\"><span class=\"doc\">Widget class</span></a>,\nwhich in turn corresponds to an HTML form widget such as <code class=\"docutils literal notranslate\">&lt;input\ntype=&quot;text&quot;&gt;</code>.</p>\n<p>In most cases, the field will have a sensible default widget. For example, by\ndefault, a <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/fields/#django.forms.CharField\" title=\"django.forms.CharField\"><code class=\"xref py py-class docutils literal notranslate\">CharField</code></a> will have a <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a> widget, that\nproduces an <code class=\"docutils literal notranslate\">&lt;input type=&quot;text&quot;&gt;</code> in the HTML. If you needed <code class=\"docutils literal notranslate\">&lt;textarea&gt;</code>\ninstead, you'd specify the appropriate widget when defining your form field,\nas we have done for the <code class=\"docutils literal notranslate\">message</code> field.</p>\n</section>\n<section id=\"field-data\">\n<h4>Field data<a class=\"heading-anchor\" href=\"#field-data\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Whatever the data submitted with a form, once it has been successfully\nvalidated by calling <code class=\"docutils literal notranslate\">is_valid()</code> (and <code class=\"docutils literal notranslate\">is_valid()</code> has returned <code class=\"docutils literal notranslate\">True</code>),\nthe validated form data will be in the <code class=\"docutils literal notranslate\">form.cleaned_data</code> dictionary. This\ndata will have been nicely converted into Python types for you.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>You can still access the unvalidated data directly from <code class=\"docutils literal notranslate\">request.POST</code> at\nthis point, but the validated data is better.</p>\n</aside>\n<p>In the contact form example above, <code class=\"docutils literal notranslate\">cc_myself</code> will be a boolean value.\nLikewise, fields such as <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/fields/#django.forms.IntegerField\" title=\"django.forms.IntegerField\"><code class=\"xref py py-class docutils literal notranslate\">IntegerField</code></a> and <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/fields/#django.forms.FloatField\" title=\"django.forms.FloatField\"><code class=\"xref py py-class docutils literal notranslate\">FloatField</code></a> convert\nvalues to a Python <code class=\"docutils literal notranslate\">int</code> and <code class=\"docutils literal notranslate\">float</code> respectively.</p>\n<p>Here's how the form data could be processed in the view that handles this form:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"default\"><figcaption class=\"code-block-caption\"><code>views.py</code></figcaption><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=\"views.py\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.core.mail</span> <span class=\"kn\">import</span> send_mail\n\n<span class=\"k\">if</span> form<span class=\"o\">.</span>is_valid<span class=\"p\">():</span>\n    subject <span class=\"o\">=</span> form<span class=\"o\">.</span>cleaned_data<span class=\"p\">[</span><span class=\"s1\">&#39;subject&#39;</span><span class=\"p\">]</span>\n    message <span class=\"o\">=</span> form<span class=\"o\">.</span>cleaned_data<span class=\"p\">[</span><span class=\"s1\">&#39;message&#39;</span><span class=\"p\">]</span>\n    sender <span class=\"o\">=</span> form<span class=\"o\">.</span>cleaned_data<span class=\"p\">[</span><span class=\"s1\">&#39;sender&#39;</span><span class=\"p\">]</span>\n    cc_myself <span class=\"o\">=</span> form<span class=\"o\">.</span>cleaned_data<span class=\"p\">[</span><span class=\"s1\">&#39;cc_myself&#39;</span><span class=\"p\">]</span>\n\n    recipients <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;info@example.com&#39;</span><span class=\"p\">]</span>\n    <span class=\"k\">if</span> cc_myself<span class=\"p\">:</span>\n        recipients<span class=\"o\">.</span>append<span class=\"p\">(</span>sender<span class=\"p\">)</span>\n\n    send_mail<span class=\"p\">(</span>subject<span class=\"p\">,</span> message<span class=\"p\">,</span> sender<span class=\"p\">,</span> recipients<span class=\"p\">)</span>\n    <span class=\"k\">return</span> HttpResponseRedirect<span class=\"p\">(</span><span class=\"s1\">&#39;/thanks/&#39;</span><span class=\"p\">)</span>\n</code></pre></figure>\n<aside class=\"admonition admonition-tip\" role=\"note\">\n<p class=\"admonition-title\">Tip</p>\n<p>For more on sending email from Django, see <a class=\"reference internal\" href=\"/ja/1.11/topics/email/\"><span class=\"doc\">メールを送信する</span></a>.</p>\n</aside>\n<p>Some field types need some extra handling. For example, files that are uploaded\nusing a form need to be handled differently (they can be retrieved from\n<code class=\"docutils literal notranslate\">request.FILES</code>, rather than <code class=\"docutils literal notranslate\">request.POST</code>). For details of how to handle\nfile uploads with your form, see <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/api/#binding-uploaded-files\"><span class=\"std std-ref\">Binding uploaded files to a form</span></a>.</p>\n</section>\n</section>\n</section>\n<section id=\"working-with-form-templates\">\n<h2>Working with form templates<a class=\"heading-anchor\" href=\"#working-with-form-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>All you need to do to get your form into a template is to place the form\ninstance into the template context. So if your form is called <code class=\"docutils literal notranslate\">form</code> in the\ncontext, <code class=\"docutils literal notranslate\">{{ form }}</code> will render its <code class=\"docutils literal notranslate\">&lt;label&gt;</code> and <code class=\"docutils literal notranslate\">&lt;input&gt;</code> elements\nappropriately.</p>\n<section id=\"form-rendering-options\">\n<h3>フォームのレンダリングオプション<a class=\"heading-anchor\" href=\"#form-rendering-options\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"admonition-additional-form-template-furniture admonition\" role=\"note\">\n<p class=\"admonition-title\">Additional form template furniture</p>\n<p>Don't forget that a form's output does <em>not</em> include the surrounding\n<code class=\"docutils literal notranslate\">&lt;form&gt;</code> tags, or the form's <code class=\"docutils literal notranslate\">submit</code> control. You will have to provide\nthese yourself.</p>\n</aside>\n<p>There are other output options though for the <code class=\"docutils literal notranslate\">&lt;label&gt;</code>/<code class=\"docutils literal notranslate\">&lt;input&gt;</code> pairs:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">{{ form.as_table }}</code> will render them as table cells wrapped in <code class=\"docutils literal notranslate\">&lt;tr&gt;</code>\ntags</p></li>\n<li><p><code class=\"docutils literal notranslate\">{{ form.as_p }}</code> will render them wrapped in <code class=\"docutils literal notranslate\">&lt;p&gt;</code> tags</p></li>\n<li><p><code class=\"docutils literal notranslate\">{{ form.as_ul }}</code> will render them wrapped in <code class=\"docutils literal notranslate\">&lt;li&gt;</code> tags</p></li>\n</ul>\n<p>Note that you'll have to provide the surrounding <code class=\"docutils literal notranslate\">&lt;table&gt;</code> or <code class=\"docutils literal notranslate\">&lt;ul&gt;</code>\nelements yourself.</p>\n<p>Here's the output of <code class=\"docutils literal notranslate\">{{ form.as_p }}</code> for our <code class=\"docutils literal notranslate\">ContactForm</code> instance:</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\">p</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;id_subject&quot;</span><span class=\"p\">&gt;</span>Subject:<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_subject&quot;</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;text&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;subject&quot;</span> <span class=\"na\">maxlength</span><span class=\"o\">=</span><span class=\"s\">&quot;100&quot;</span> <span class=\"na\">required</span> <span class=\"p\">/&gt;&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;id_message&quot;</span><span class=\"p\">&gt;</span>Message:<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">textarea</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;message&quot;</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_message&quot;</span> <span class=\"na\">required</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">textarea</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;id_sender&quot;</span><span class=\"p\">&gt;</span>Sender:<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;email&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;sender&quot;</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_sender&quot;</span> <span class=\"na\">required</span> <span class=\"p\">/&gt;&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;id_cc_myself&quot;</span><span class=\"p\">&gt;</span>Cc myself:<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;checkbox&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;cc_myself&quot;</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_cc_myself&quot;</span> <span class=\"p\">/&gt;&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Note that each form field has an ID attribute set to <code class=\"docutils literal notranslate\">id_&lt;field-name&gt;</code>, which\nis referenced by the accompanying label tag. This is important in ensuring that\nforms are accessible to assistive technology such as screen reader software.\nYou can also <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/api/#ref-forms-api-configuring-label\"><span class=\"std std-ref\">customize the way in which labels and ids are generated</span></a>.</p>\n<p>See <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/api/#ref-forms-api-outputting-html\"><span class=\"std std-ref\">Outputting forms as HTML</span></a> for more on this.</p>\n</section>\n<section id=\"rendering-fields-manually\">\n<h3>Rendering fields manually<a class=\"heading-anchor\" href=\"#rendering-fields-manually\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>We don't have to let Django unpack the form's fields; we can do it manually if\nwe like (allowing us to reorder the fields, for example). Each field is\navailable as an attribute of the form using <code class=\"docutils literal notranslate\">{{ form.name_of_field }}</code>, and\nin a Django template, will be rendered appropriately. For example:</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=\"cp\">{{</span> <span class=\"nv\">form.non_field_errors</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.subject.errors</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.subject.id_for_label</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>Email subject:<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.subject</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.message.errors</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.message.id_for_label</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>Your message:<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.message</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.sender.errors</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.sender.id_for_label</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>Your email address:<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.sender</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.cc_myself.errors</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.cc_myself.id_for_label</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>CC yourself?<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.cc_myself</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Complete <code class=\"docutils literal notranslate\">&lt;label&gt;</code> elements can also be generated using the\n<a class=\"reference internal\" href=\"/ja/1.11/ref/forms/api/#django.forms.BoundField.label_tag\" title=\"django.forms.BoundField.label_tag\"><code class=\"xref py py-meth docutils literal notranslate\">label_tag()</code></a>. For example:</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\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.subject.errors</span> <span class=\"cp\">}}</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.subject.label_tag</span> <span class=\"cp\">}}</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.subject</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<section id=\"rendering-form-error-messages\">\n<h4>フォームのエラーメッセージをレンダリングする<a class=\"heading-anchor\" href=\"#rendering-form-error-messages\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Of course, the price of this flexibility is more work. Until now we haven't had\nto worry about how to display form errors, because that's taken care of for us.\nIn this example we have had to make sure we take care of any errors for each\nfield and any errors for the form as a whole. Note <code class=\"docutils literal notranslate\">{{ form.non_field_errors\n}}</code> at the top of the form and the template lookup for errors on each field.</p>\n<p>Using <code class=\"docutils literal notranslate\">{{ form.name_of_field.errors }}</code> displays a list of form errors,\nrendered as an unordered list. This might look like:</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\">ul</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;errorlist&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>Sender is required.<span class=\"p\">&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>The list has a CSS class of <code class=\"docutils literal notranslate\">errorlist</code> to allow you to style its appearance.\nIf you wish to further customize the display of errors you can do so by looping\nover them:</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=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">form.subject.errors</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">ol</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">error</span> <span class=\"k\">in</span> <span class=\"nv\">form.subject.errors</span> <span class=\"cp\">%}</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">strong</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">error</span><span class=\"o\">|</span><span class=\"nf\">escape</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">strong</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">ol</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Non-field errors (and/or hidden field errors that are rendered at the top of\nthe form when using helpers like <code class=\"docutils literal notranslate\">form.as_p()</code>) will be rendered with an\nadditional class of <code class=\"docutils literal notranslate\">nonfield</code> to help distinguish them from field-specific\nerrors. For example, <code class=\"docutils literal notranslate\">{{ form.non_field_errors }}</code> would look like:</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\">ul</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;errorlist nonfield&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>Generic validation error<span class=\"p\">&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>See <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/api/\"><span class=\"doc\">フォーム API</span></a> for more on errors, styling, and working with form\nattributes in templates.</p>\n</section>\n</section>\n<section id=\"looping-over-the-form-s-fields\">\n<h3>Looping over the form's fields<a class=\"heading-anchor\" href=\"#looping-over-the-form-s-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>If you're using the same HTML for each of your form fields, you can reduce\nduplicate code by looping through each field in turn using a <code class=\"docutils literal notranslate\">{% for %}</code>\nloop:</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=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">field</span> <span class=\"k\">in</span> <span class=\"nv\">form</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">field.errors</span> <span class=\"cp\">}}</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">field.label_tag</span> <span class=\"cp\">}}</span> <span class=\"cp\">{{</span> <span class=\"nv\">field</span> <span class=\"cp\">}}</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">field.help_text</span> <span class=\"cp\">%}</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">p</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;help&quot;</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">field.help_text</span><span class=\"o\">|</span><span class=\"nf\">safe</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Useful attributes on <code class=\"docutils literal notranslate\">{{ field }}</code> include:</p>\n<dl>\n<dt><code class=\"docutils literal notranslate\">{{ field.label }}</code></dt><dd><p>The label of the field, e.g. <code class=\"docutils literal notranslate\">Email address</code>.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\">{{ field.label_tag }}</code></dt><dd><p>The field's label wrapped in the appropriate HTML <code class=\"docutils literal notranslate\">&lt;label&gt;</code> tag. This\nincludes the form's <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/api/#django.forms.Form.label_suffix\" title=\"django.forms.Form.label_suffix\"><code class=\"xref py py-attr docutils literal notranslate\">label_suffix</code></a>. For example,\nthe default <code class=\"docutils literal notranslate\">label_suffix</code> is a colon:</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>label <span class=\"k\">for</span><span class=\"o\">=</span><span class=\"s2\">&quot;id_email&quot;</span><span class=\"o\">&gt;</span>Email address<span class=\"p\">:</span><span class=\"o\">&lt;/</span>label<span class=\"o\">&gt;</span>\n</code></pre></div>\n</dd>\n<dt><code class=\"docutils literal notranslate\">{{ field.id_for_label }}</code></dt><dd><p>The ID that will be used for this field (<code class=\"docutils literal notranslate\">id_email</code> in the example\nabove). If you are constructing the label manually, you may want to use\nthis in lieu of <code class=\"docutils literal notranslate\">label_tag</code>. It's also useful, for example, if you have\nsome inline JavaScript and want to avoid hardcoding the field's ID.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\">{{ field.value }}</code></dt><dd><p>The value of the field. e.g <code class=\"docutils literal notranslate\">someone&#64;example.com</code>.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\">{{ field.html_name }}</code></dt><dd><p>The name of the field that will be used in the input element's name\nfield. This takes the form prefix into account, if it has been set.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\">{{ field.help_text }}</code></dt><dd><p>Any help text that has been associated with the field.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\">{{ field.errors }}</code></dt><dd><p>Outputs a <code class=\"docutils literal notranslate\">&lt;ul class=&quot;errorlist&quot;&gt;</code> containing any validation errors\ncorresponding to this field. You can customize the presentation of\nthe errors with a <code class=\"docutils literal notranslate\">{% for error in field.errors %}</code> loop. In this\ncase, each object in the loop is a simple string containing the error\nmessage.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\">{{ field.is_hidden }}</code></dt><dd><p>This attribute is <code class=\"docutils literal notranslate\">True</code> if the form field is a hidden field and\n<code class=\"docutils literal notranslate\">False</code> otherwise. It's not particularly useful as a template\nvariable, but could be useful in conditional tests such as:</p>\n</dd>\n</dl>\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=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">field.is_hidden</span> <span class=\"cp\">%}</span>\n   <span class=\"c\">{# Do something special #}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\">{{ field.field }}</code></dt><dd><p>The <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/fields/#django.forms.Field\" title=\"django.forms.Field\"><code class=\"xref py py-class docutils literal notranslate\">Field</code></a> instance from the form class that\nthis <a class=\"reference internal\" href=\"/ja/1.11/ref/forms/api/#django.forms.BoundField\" title=\"django.forms.BoundField\"><code class=\"xref py py-class docutils literal notranslate\">BoundField</code></a> wraps. You can use it to access\n<a class=\"reference internal\" href=\"/ja/1.11/ref/forms/fields/#django.forms.Field\" title=\"django.forms.Field\"><code class=\"xref py py-class docutils literal notranslate\">Field</code></a> attributes, e.g.\n<code class=\"docutils literal notranslate\">{{ char_field.field.max_length }}</code>.</p>\n</dd>\n</dl>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">参考</p>\n<p>For a complete list of attributes and methods, see\n<a class=\"reference internal\" href=\"/ja/1.11/ref/forms/api/#django.forms.BoundField\" title=\"django.forms.BoundField\"><code class=\"xref py py-class docutils literal notranslate\">BoundField</code></a>.</p>\n</aside>\n<section id=\"looping-over-hidden-and-visible-fields\">\n<h4>Looping over hidden and visible fields<a class=\"heading-anchor\" href=\"#looping-over-hidden-and-visible-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>If you're manually laying out a form in a template, as opposed to relying on\nDjango's default form layout, you might want to treat <code class=\"docutils literal notranslate\">&lt;input type=&quot;hidden&quot;&gt;</code>\nfields differently from non-hidden fields. For example, because hidden fields\ndon't display anything, putting error messages &quot;next to&quot; the field could cause\nconfusion for your users -- so errors for those fields should be handled\ndifferently.</p>\n<p>Django provides two methods on a form that allow you to loop over the hidden\nand visible fields independently: <code class=\"docutils literal notranslate\">hidden_fields()</code> and\n<code class=\"docutils literal notranslate\">visible_fields()</code>. Here's a modification of an earlier example that uses\nthese two methods:</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=\"c\">{# Include the hidden fields #}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">hidden</span> <span class=\"k\">in</span> <span class=\"nv\">form.hidden_fields</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{{</span> <span class=\"nv\">hidden</span> <span class=\"cp\">}}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"c\">{# Include the visible fields #}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">field</span> <span class=\"k\">in</span> <span class=\"nv\">form.visible_fields</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">field.errors</span> <span class=\"cp\">}}</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">field.label_tag</span> <span class=\"cp\">}}</span> <span class=\"cp\">{{</span> <span class=\"nv\">field</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>This example does not handle any errors in the hidden fields. Usually, an\nerror in a hidden field is a sign of form tampering, since normal form\ninteraction won't alter them. However, you could easily insert some error\ndisplays for those form errors, as well.</p>\n</section>\n</section>\n<section id=\"reusable-form-templates\">\n<h3>再利用可能なフォームテンプレート<a class=\"heading-anchor\" href=\"#reusable-form-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>If your site uses the same rendering logic for forms in multiple places, you\ncan reduce duplication by saving the form's loop in a standalone template and\nusing the <a class=\"reference internal\" href=\"/ja/1.11/ref/templates/builtins/#std-templatetag-include\"><code class=\"xref std std-ttag docutils literal notranslate\">include</code></a> tag to reuse it in other templates:</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># In your form template:\n<span class=\"cp\">{%</span> <span class=\"k\">include</span> <span class=\"s2\">&quot;form_snippet.html&quot;</span> <span class=\"cp\">%}</span>\n\n# In form_snippet.html:\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">field</span> <span class=\"k\">in</span> <span class=\"nv\">form</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">field.errors</span> <span class=\"cp\">}}</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">field.label_tag</span> <span class=\"cp\">}}</span> <span class=\"cp\">{{</span> <span class=\"nv\">field</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>If the form object passed to a template has a different name within the\ncontext, you can alias it using the <code class=\"docutils literal notranslate\">with</code> argument of the <a class=\"reference internal\" href=\"/ja/1.11/ref/templates/builtins/#std-templatetag-include\"><code class=\"xref std std-ttag docutils literal notranslate\">include</code></a>\ntag:</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=\"cp\">{%</span> <span class=\"k\">include</span> <span class=\"s2\">&quot;form_snippet.html&quot;</span> <span class=\"k\">with</span> <span class=\"nv\">form</span><span class=\"o\">=</span><span class=\"nv\">comment_form</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>If you find yourself doing this often, you might consider creating a custom\n<a class=\"reference internal\" href=\"/ja/1.11/howto/custom-template-tags/#howto-custom-template-tags-inclusion-tags\"><span class=\"std std-ref\">inclusion tag</span></a>.</p>\n</section>\n</section>\n<section id=\"further-topics\">\n<h2>Further topics<a class=\"heading-anchor\" href=\"#further-topics\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>This covers the basics, but forms can do a whole lot more:</p>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/ja/1.11/topics/forms/formsets/\">フォームセット (Formsets)</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/1.11/topics/forms/formsets/#using-initial-data-with-a-formset\">フォームセットに初期データを指定する</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/1.11/topics/forms/formsets/#limiting-the-maximum-number-of-forms\">フォームの最大表示数を制限する</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/1.11/topics/forms/formsets/#formset-validation\">フォームセットのバリデーション</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/1.11/topics/forms/formsets/#validating-the-number-of-forms-in-a-formset\">Validating the number of forms in a formset</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/1.11/topics/forms/formsets/#dealing-with-ordering-and-deletion-of-forms\">Dealing with ordering and deletion of forms</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/1.11/topics/forms/formsets/#adding-additional-fields-to-a-formset\">Adding additional fields to a formset</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/1.11/topics/forms/formsets/#passing-custom-parameters-to-formset-forms\">Passing custom parameters to formset forms</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/1.11/topics/forms/formsets/#using-a-formset-in-views-and-templates\">Using a formset in views and templates</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/ja/1.11/topics/forms/modelforms/\">モデルからフォームを作成する</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/1.11/topics/forms/modelforms/#modelform\"><code class=\"docutils literal notranslate\">ModelForm</code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/1.11/topics/forms/modelforms/#model-formsets\">モデルのフォームセット</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/1.11/topics/forms/modelforms/#inline-formsets\">インラインフォームセット</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/ja/1.11/topics/forms/media/\">Form Assets (the <code class=\"docutils literal notranslate\">Media</code> class)</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/1.11/topics/forms/media/#assets-as-a-static-definition\">Assets as a static definition</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/1.11/topics/forms/media/#media-as-a-dynamic-property\"><code class=\"docutils literal notranslate\">Media</code> as a dynamic property</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/1.11/topics/forms/media/#paths-in-asset-definitions\">Paths in asset definitions</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/1.11/topics/forms/media/#media-objects\"><code class=\"docutils literal notranslate\">Media</code> objects</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/1.11/topics/forms/media/#media-on-forms\"><code class=\"docutils literal notranslate\">Media</code> on Forms</a></li>\n</ul>\n</li>\n</ul>\n</div>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">参考</p>\n<dl class=\"simple\">\n<dt><a class=\"reference internal\" href=\"/ja/1.11/ref/forms/\"><span class=\"doc\">The Forms Reference</span></a></dt><dd><p>Covers the full API reference, including form fields, form widgets,\nand form and field validation.</p>\n</dd>\n</dl>\n</aside>\n</section>","rootId":"working-with-forms","toc":[{"title":"HTML フォーム","anchor":"html-forms","children":[{"title":"GET と POST","anchor":"get-and-post","children":[]}]},{"title":"フォームにおける Django の役割","anchor":"django-s-role-in-forms","children":[]},{"title":"Django におけるフォーム","anchor":"forms-in-django","children":[{"title":"Django の Form クラス","anchor":"the-django-form-class","children":[]},{"title":"フォームをインスタンス化し、処理し、レンダリングする","anchor":"instantiating-processing-and-rendering-forms","children":[]}]},{"title":"フォームを作る","anchor":"building-a-form","children":[{"title":"すべきこと","anchor":"the-work-that-needs-to-be-done","children":[]},{"title":"Django でフォームを作る","anchor":"building-a-form-in-django","children":[{"title":"Form クラス","anchor":"the-form-class","children":[]},{"title":"ビュー","anchor":"the-view","children":[]},{"title":"テンプレート","anchor":"the-template","children":[]}]}]},{"title":"More about Django Form classes","anchor":"more-about-django-form-classes","children":[{"title":"Bound and unbound form instances","anchor":"bound-and-unbound-form-instances","children":[]},{"title":"More on fields","anchor":"more-on-fields","children":[{"title":"ウィジェット","anchor":"widgets","children":[]},{"title":"Field data","anchor":"field-data","children":[]}]}]},{"title":"Working with form templates","anchor":"working-with-form-templates","children":[{"title":"フォームのレンダリングオプション","anchor":"form-rendering-options","children":[]},{"title":"Rendering fields manually","anchor":"rendering-fields-manually","children":[{"title":"フォームのエラーメッセージをレンダリングする","anchor":"rendering-form-error-messages","children":[]}]},{"title":"Looping over the form's fields","anchor":"looping-over-the-form-s-fields","children":[{"title":"Looping over hidden and visible fields","anchor":"looping-over-hidden-and-visible-fields","children":[]}]},{"title":"再利用可能なフォームテンプレート","anchor":"reusable-form-templates","children":[]}]},{"title":"Further topics","anchor":"further-topics","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Django を使う","url":"/ja/1.11/topics/"}],"prev":{"docname":"topics/http/sessions","title":"セッションの使いかた","url":"/ja/1.11/topics/http/sessions/"},"next":{"docname":"topics/forms/formsets","title":"フォームセット (Formsets)","url":"/ja/1.11/topics/forms/formsets/"},"formats":{"html":"/ja/1.11/topics/forms/","markdown":"/ja/1.11/topics/forms.md","json":"/ja/1.11/topics/forms.json"},"source":"https://github.com/django/django/blob/stable/1.11.x/docs/topics/forms/index.txt","official":"https://docs.djangoproject.com/ja/1.11/topics/forms/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","fr","ja","id","pt-br","ko","es","el","pl"]}