{"title":"組み込みのビュー","version":"5.2","locale":"ja","docname":"ref/views","url":"/ja/5.2/ref/views/","canonical":"https://djangodocs.dev/ja/5.2/ref/views/","summary":"Django の組み込みビューのいくつかは、ビューを記述するや他のドキュメントで説明されています。","html":"<span id=\"built-in-views\"></span><h1>組み込みのビュー<a class=\"heading-anchor\" href=\"#module-django.views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django の組み込みビューのいくつかは、 <a class=\"reference internal\" href=\"/ja/5.2/topics/http/views/\"><span class=\"doc\">ビューを記述する</span></a> や他のドキュメントで説明されています。</p>\n<section id=\"serving-files-in-development\">\n<h2>開発中のファイルの配信<a class=\"heading-anchor\" href=\"#serving-files-in-development\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.static.serve\">\n<span class=\"sig-prename descclassname\">static.</span><span class=\"sig-name descname\">serve</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">path</em>, <em class=\"sig-param\">document_root</em>, <em class=\"sig-param\">show_indexes<span class=\"o\">=</span><span class=\"default_value\">False</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.static.serve\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>プロジェクトの静的アセット以外にも、利便性のために、ローカル開発で Django に配信させたいファイルがあるかもしれません。 <a class=\"reference internal\" href=\"#django.views.static.serve\" title=\"django.views.static.serve\"><code class=\"xref py py-func docutils literal notranslate\">serve()</code></a> ビューを使えば、任意のディレクトリに配信できます。(このビューは本番環境では <strong>使えない</strong> ので、開発の補助としてだけ使ってください。本番環境では実際のフロントエンド Web サーバを使ってこれらのファイルを配信してください)。</p>\n<p>最もありそうな例は、 <a class=\"reference internal\" href=\"/ja/5.2/ref/settings/#std-setting-MEDIA_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\">MEDIA_ROOT</code></a> にあるユーザがアップロードしたコンテンツです。 <code class=\"docutils literal notranslate\">django.contrib.staticfiles</code> は静的アセット用で、ユーザがアップロードしたファイルに対する組み込みの処理はありませんが、 URLconf に次のような記述を追加することで、 Django に <a class=\"reference internal\" href=\"/ja/5.2/ref/settings/#std-setting-MEDIA_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\">MEDIA_ROOT</code></a> を配信させることができます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.conf</span> <span class=\"kn\">import</span> settings\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> re_path\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.static</span> <span class=\"kn\">import</span> serve\n\n<span class=\"c1\"># ... the rest of your URLconf goes here ...</span>\n\n<span class=\"k\">if</span> settings<span class=\"o\">.</span>DEBUG<span class=\"p\">:</span>\n    urlpatterns <span class=\"o\">+=</span> <span class=\"p\">[</span>\n        re_path<span class=\"p\">(</span>\n            <span class=\"sa\">r</span><span class=\"s2\">&quot;^media/(?P&lt;path&gt;.*)$&quot;</span><span class=\"p\">,</span>\n            serve<span class=\"p\">,</span>\n            <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;document_root&quot;</span><span class=\"p\">:</span> settings<span class=\"o\">.</span>MEDIA_ROOT<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>このコードは <a class=\"reference internal\" href=\"/ja/5.2/ref/settings/#std-setting-MEDIA_URL\"><code class=\"xref std std-setting docutils literal notranslate\">MEDIA_URL</code></a> の値が <code class=\"docutils literal notranslate\">'media/'</code> であると仮定しています。これは <a class=\"reference internal\" href=\"#django.views.static.serve\" title=\"django.views.static.serve\"><code class=\"xref py py-func docutils literal notranslate\">serve()</code></a> ビューを呼び出して、 URLconf からのパス (必須) と <code class=\"docutils literal notranslate\">document_root</code> パラメータを渡します。</p>\n<p>この URL パターンを定義するのは少し面倒なので、 Django には小さな URL ヘルパー関数 <a class=\"reference internal\" href=\"/ja/5.2/ref/urls/#django.conf.urls.static.static\" title=\"django.conf.urls.static.static\"><code class=\"xref py py-func docutils literal notranslate\">static()</code></a> が同梱されています。この関数は <a class=\"reference internal\" href=\"/ja/5.2/ref/settings/#std-setting-MEDIA_URL\"><code class=\"xref std std-setting docutils literal notranslate\">MEDIA_URL</code></a> のようなプレフィックスと、 <code class=\"docutils literal notranslate\">'django.views.static.serve'</code> のようなビューへのドットパスをパラメータとして受け取ります。その他の関数のパラメータは透過的にビューに渡されます。</p>\n</section>\n<section id=\"error-views\">\n<span id=\"id1\"></span><h2>エラー・ビュー<a class=\"heading-anchor\" href=\"#error-views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django には HTTP エラーを処理するためのビューがデフォルトでいくつか付属して います。これらを独自のカスタムビューで上書きするには、 <a class=\"reference internal\" href=\"/ja/5.2/topics/http/views/#customizing-error-views\"><span class=\"std std-ref\">エラービューをカスタマイズする</span></a> を参照してください。</p>\n<section id=\"the-404-page-not-found-view\">\n<span id=\"http-not-found-view\"></span><h3>404 (page not found) ビュー<a class=\"heading-anchor\" href=\"#the-404-page-not-found-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.defaults.page_not_found\">\n<span class=\"sig-prename descclassname\">defaults.</span><span class=\"sig-name descname\">page_not_found</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">exception</em>, <em class=\"sig-param\">template_name<span class=\"o\">=</span><span class=\"default_value\">'404.html'</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.defaults.page_not_found\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>ビュー内で <a class=\"reference internal\" href=\"/ja/5.2/topics/http/views/#django.http.Http404\" title=\"django.http.Http404\"><code class=\"xref py py-exc docutils literal notranslate\">Http404</code></a> を発生させると、 Django は 404 エラーの処理に特化した特別なビューを読み込みます。デフォルトでは <a class=\"reference internal\" href=\"#django.views.defaults.page_not_found\" title=\"django.views.defaults.page_not_found\"><code class=\"xref py py-func docutils literal notranslate\">django.views.defaults.page_not_found()</code></a> というビューで、&quot;Not Found&quot; メッセージを表示するか、ルートテンプレートディレクトリにテンプレート <code class=\"docutils literal notranslate\">404.html</code> を作成した場合、それを読み込んでレンダリングします。</p>\n<p>デフォルトの404ビューはテンプレートに2つの変数を渡します。<code class=\"docutils literal notranslate\">request_path</code> はエラーの原因となった URL で、<code class=\"docutils literal notranslate\">exception</code> はビューのトリガーとなった例外の有用な表現です (たとえば、特定の <code class=\"docutils literal notranslate\">Http404</code> インスタンスに渡されたメッセージなど)。</p>\n<p>404ビューには以下の3つの注意点があります:</p>\n<ul class=\"simple\">\n<li><p>404 ビューは、 Django が URLconf 内の正規表現を全てチェックしてもマッチしない場合にも呼び出されます。</p></li>\n<li><p>404 ビューには <a class=\"reference internal\" href=\"/ja/5.2/ref/templates/api/#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\">RequestContext</code></a> が渡され、テンプレートコンテキストプロセッサが提供する変数 (たとえば <code class=\"docutils literal notranslate\">MEDIA_URL</code>) にアクセスできます。</p></li>\n<li><p>もし <a class=\"reference internal\" href=\"/ja/5.2/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\">DEBUG</code></a> が <code class=\"docutils literal notranslate\">True</code> に設定されている場合(設定モジュール内)、404ビューは使用されず、代わりに URLconf がデバッグ情報と共に表示されます。</p></li>\n</ul>\n</section>\n<section id=\"the-500-server-error-view\">\n<span id=\"http-internal-server-error-view\"></span><h3>500（サーバーエラー）ビュー<a class=\"heading-anchor\" href=\"#the-500-server-error-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.defaults.server_error\">\n<span class=\"sig-prename descclassname\">defaults.</span><span class=\"sig-name descname\">server_error</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">template_name<span class=\"o\">=</span><span class=\"default_value\">'500.html'</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.defaults.server_error\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>同様に、Django はビューコードで実行時エラーが発生した場合、特別なケースの動作を実行します。ビューで例外が発生した場合、 Django はデフォルトで <code class=\"docutils literal notranslate\">django.views.defaults.server_error</code> というビューを呼び出します。このビューは &quot;Server Error&quot; というメッセージを表示するか、ルートテンプレートディレクトリにテンプレート <code class=\"docutils literal notranslate\">500.html</code> を作成した場合、それを読み込んでレンダリングします。</p>\n<p>デフォルトの500ビューは <code class=\"docutils literal notranslate\">500.html</code> テンプレートに変数を渡さず、空の <code class=\"docutils literal notranslate\">Context</code> でレンダリングされ、追加エラーの可能性を減らします。</p>\n<p>もし <a class=\"reference internal\" href=\"/ja/5.2/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\">DEBUG</code></a> が <code class=\"docutils literal notranslate\">True</code> に設定されている場合 (設定モジュールで)、500 ビューは使用されず、代わりにトレースバックがデバッグ情報と共に表示されます。</p>\n</section>\n<section id=\"the-403-http-forbidden-view\">\n<span id=\"http-forbidden-view\"></span><h3>403 (HTTP Forbidden) ビュー<a class=\"heading-anchor\" href=\"#the-403-http-forbidden-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.defaults.permission_denied\">\n<span class=\"sig-prename descclassname\">defaults.</span><span class=\"sig-name descname\">permission_denied</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">exception</em>, <em class=\"sig-param\">template_name<span class=\"o\">=</span><span class=\"default_value\">'403.html'</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.defaults.permission_denied\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>404 や 500 のビューと同じように、 Django には 403 Forbidden エラーを扱うビューがあります。ビューで 403 例外が発生した場合、 Django はデフォルトで <code class=\"docutils literal notranslate\">django.views.defaults.permission_denied</code> というビューを呼び出します。</p>\n<p>このビューはルートテンプレートディレクトリにあるテンプレート <code class=\"docutils literal notranslate\">403.html</code> を読み込んでレンダリングします。このファイルが存在しない場合は、代わりに <span class=\"target\" id=\"index-2\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc9110.html#section-15.5.4\"><strong>RFC 9110 Section 15.5.4</strong></a> (HTTP 1.1 仕様) に従って &quot;403 Forbidden&quot; というテキストを配信します。テンプレートコンテキストは <code class=\"docutils literal notranslate\">exception</code> を含んでおり、これはビューのトリガーとなった例外の文字列表現です。</p>\n<p><code class=\"docutils literal notranslate\">django.views.defaults.permission_denied</code> は <a class=\"reference internal\" href=\"/ja/5.2/ref/exceptions/#django.core.exceptions.PermissionDenied\" title=\"django.core.exceptions.PermissionDenied\"><code class=\"xref py py-exc docutils literal notranslate\">PermissionDenied</code></a> 例外がトリガーとなります。ビューでアクセスを拒否するには、次のようなコードを使用します:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.core.exceptions</span> <span class=\"kn\">import</span> PermissionDenied\n\n\n<span class=\"k\">def</span> <span class=\"nf\">edit</span><span class=\"p\">(</span>request<span class=\"p\">,</span> pk<span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> request<span class=\"o\">.</span>user<span class=\"o\">.</span>is_staff<span class=\"p\">:</span>\n        <span class=\"k\">raise</span> PermissionDenied\n    <span class=\"c1\"># ...</span>\n</code></pre></div>\n</section>\n<section id=\"the-400-bad-request-view\">\n<span id=\"http-bad-request-view\"></span><h3>400（bad request）ビュー<a class=\"heading-anchor\" href=\"#the-400-bad-request-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.defaults.bad_request\">\n<span class=\"sig-prename descclassname\">defaults.</span><span class=\"sig-name descname\">bad_request</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">exception</em>, <em class=\"sig-param\">template_name<span class=\"o\">=</span><span class=\"default_value\">'400.html'</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.defaults.bad_request\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Django で <a class=\"reference internal\" href=\"/ja/5.2/ref/exceptions/#django.core.exceptions.SuspiciousOperation\" title=\"django.core.exceptions.SuspiciousOperation\"><code class=\"xref py py-exc docutils literal notranslate\">SuspiciousOperation</code></a> が発生すると、 Django のコンポーネントで処理されるかもしれません (たとえばセッションデータのリセットなど)。特に処理されない場合、 Django は現在のリクエストをサーバエラーではなく「不正なリクエスト」と見なします。</p>\n<p><code class=\"docutils literal notranslate\">django.views.defaults.bad_request</code> は <code class=\"docutils literal notranslate\">server_error</code> ビューとよく似ていますが、エラー状態がクライアント操作の結果であることを示すステータスコード 400 を返します。デフォルトでは、例外メッセージにファイルシステムのパスのような機密情報が含まれている可能性があるため、ビューのトリガーとなった例外に関係するものはテンプレートコンテキストに渡されません。</p>\n<p>また、<code class=\"docutils literal notranslate\">bad_request</code> ビューは <a class=\"reference internal\" href=\"/ja/5.2/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\">DEBUG</code></a> が <code class=\"docutils literal notranslate\">False</code> のときだけ使用されます。</p>\n</section>\n</section>","rootId":"module-django.views","toc":[{"title":"開発中のファイルの配信","anchor":"serving-files-in-development","children":[]},{"title":"エラー・ビュー","anchor":"error-views","children":[{"title":"404 (page not found) ビュー","anchor":"the-404-page-not-found-view","children":[]},{"title":"500（サーバーエラー）ビュー","anchor":"the-500-server-error-view","children":[]},{"title":"403 (HTTP Forbidden) ビュー","anchor":"the-403-http-forbidden-view","children":[]},{"title":"400（bad request）ビュー","anchor":"the-400-bad-request-view","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API リファレンス","url":"/ja/5.2/ref/"}],"prev":{"docname":"ref/validators","title":"バリデータ (Validator)","url":"/ja/5.2/ref/validators/"},"next":{"docname":"misc/index","title":"メタドキュメントとその他","url":"/ja/5.2/misc/"},"formats":{"html":"/ja/5.2/ref/views/","markdown":"/ja/5.2/ref/views.md","json":"/ja/5.2/ref/views.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/ref/views.txt","official":"https://docs.djangoproject.com/ja/5.2/ref/views/","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"]}