{"title":"URL ディスパッチャ","version":"5.0","locale":"ja","docname":"topics/http/urls","url":"/ja/5.0/topics/http/urls/","canonical":"https://djangodocs.dev/ja/5.0/topics/http/urls/","summary":"すっきりした、簡潔で明解な URL スキームは、高品質な Web アプリケーションでは重要な要素です。 Django では、フレームワークの制限なしに、望み通りの URL を設計できます。 URL はすっきりした扱いやすいものにすべきであるという主張については、ワール ドワイドウェブの産みの親である Tim…","html":"<h1>URL ディスパッチャ<a class=\"heading-anchor\" href=\"#url-dispatcher\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>すっきりした、簡潔で明解な URL スキームは、高品質な Web アプリケーションでは重要な要素です。 Django では、フレームワークの制限なしに、望み通りの URL を設計できます。</p>\n<p>URL はすっきりした扱いやすいものにすべきであるという主張については、ワール ドワイドウェブの産みの親である Tim Berners-Lee の優れた解説、 <a class=\"reference external\" href=\"https://www.w3.org/Provider/Style/URI\">Cool URIs don't change</a> を参照してください。</p>\n<section id=\"overview\">\n<h2>概要<a class=\"heading-anchor\" href=\"#overview\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>アプリケーションのURLを設計するには、俗に <strong>URLconf</strong> (URL configuration) と呼ばれる Python モジュールを作る必要があります。このモジュールは pure  Python コードであり、URLパス表記とあなたの書いたビューの Python 関数とのマッピングです。</p>\n<p>このマッピングは短くもできますし、必要なだけ長くもできます。他のマッピングも参照できます。また、pure Python コードなので、動的に生成できます。</p>\n<p>Django は有効にされている言語に従って URL を翻訳するための手段も提供しています。詳しくは <a class=\"reference internal\" href=\"/ja/5.0/topics/i18n/translation/#url-internationalization\"><span class=\"std std-ref\">国際化のドキュメント</span></a> を参照してください。</p>\n</section>\n<section id=\"how-django-processes-a-request\">\n<span id=\"id1\"></span><h2>Django のリクエスト処理<a class=\"heading-anchor\" href=\"#how-django-processes-a-request\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>ユーザが Django で作られたサイト上のページをリクエストした時に、どの Python コードが実行されるかは以下のアルゴリズムで決定されます。</p>\n<ol class=\"arabic simple\">\n<li><p>まず、Django は、どのモジュールをルート URLconf として使うか決定します。通常は、この値は <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-ROOT_URLCONF\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">ROOT_URLCONF</span></code></a> に設定されています。ただし、 HttpRequest オブジェクトに <a class=\"reference internal\" href=\"/ja/5.0/ref/request-response/#django.http.HttpRequest.urlconf\" title=\"django.http.HttpRequest.urlconf\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">urlconf</span></code></a> という属性が設定されていた場合 ( middleware で設定されます) 、その値を <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-ROOT_URLCONF\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">ROOT_URLCONF</span></code></a> の代わりに使います。</p></li>\n<li><p>Django はその Python モジュールをロードして、<code class=\"docutils literal notranslate\"><span class=\"pre\">urlpatterns</span></code> という名前の変数を探します。この変数の値は <a class=\"reference internal\" href=\"/ja/5.0/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.urls.path()</span></code></a> または <a class=\"reference internal\" href=\"/ja/5.0/ref/urls/#django.urls.re_path\" title=\"django.urls.re_path\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.urls.re_path()</span></code></a> インスタンスの <a class=\"reference external\" href=\"https://docs.python.org/3/glossary.html#term-sequence\" title=\"(in Python v3.14)\"><span class=\"xref std std-term\">sequence</span></a> でなければなりません。</p></li>\n<li><p>Django は URL パターンを順に調べて、 <a class=\"reference internal\" href=\"/ja/5.0/ref/request-response/#django.http.HttpRequest.path_info\" title=\"django.http.HttpRequest.path_info\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">path_info</span></code></a> にマッチする、リクエストされた URL にマッチする最初のパターンで停止します。</p></li>\n<li><p>ある 1 個の正規表現にマッチしたら、 Django はマッピングで指定されたビューを import して呼び出します。そのビューは Python 関数 (もしくは <a class=\"reference internal\" href=\"/ja/5.0/topics/class-based-views/\"><span class=\"doc\">クラスベースのビュー</span></a>) です。ビューには以下の引数が渡されます:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/ja/5.0/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code></a> のインスタンス。</p></li>\n<li><p>マッチしたURLパターンに名前付きグループが含まれていない場合、正規表現でマッチした値が位置引数として提供されます。</p></li>\n<li><p>指定された URL パス表現でマッチした名前付き部分からはキーワード引数が作られます。ただし、 <a class=\"reference internal\" href=\"/ja/5.0/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.urls.path()</span></code></a> や <a class=\"reference internal\" href=\"/ja/5.0/ref/urls/#django.urls.re_path\" title=\"django.urls.re_path\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.urls.re_path()</span></code></a> に <code class=\"docutils literal notranslate\"><span class=\"pre\">kwargs</span></code> オプション引数が指定されていた場合は、その中の引数で上書きされます。</p></li>\n</ul>\n</li>\n<li><p>もし、 URL 正規表現が何にもマッチしなかったり、パターンマッチングプロセスの途中のどこかで例外が発生した場合、Django は適切なエラーハンドリングビューを呼び出します。下の <a class=\"reference internal\" href=\"#error-handling\">Error handling</a> を見てください。</p></li>\n</ol>\n</section>\n<section id=\"example\">\n<h2>カスタマイズ例<a class=\"heading-anchor\" href=\"#example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>URLconf のサンプルです。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">path</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;articles/2003/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">special_case_2003</span><span class=\"p\">),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;articles/&lt;int:year&gt;/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">year_archive</span><span class=\"p\">),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;articles/&lt;int:year&gt;/&lt;int:month&gt;/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">month_archive</span><span class=\"p\">),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;articles/&lt;int:year&gt;/&lt;int:month&gt;/&lt;slug:slug&gt;/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">article_detail</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>メモ:</p>\n<ul class=\"simple\">\n<li><p>URLから値をキャプチャするには、角括弧を使用します。</p></li>\n<li><p>取り込んだ値にはオプションでコンバータタイプを含めることができます。たとえば、整数のパラメータをキャプチャするには <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;int:name&gt;</span></code> を使用します。コンバータが含まれていない場合は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">/</span></code> 文字を除いた文字列がマッチします。</p></li>\n<li><p>スラッシュを先頭につける必要はありません。たとえば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">/articles</span></code> ではなく <code class=\"docutils literal notranslate\"><span class=\"pre\">articles</span></code> です。</p></li>\n</ul>\n<p>リクエストの例:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">articles/2005/03/</span></code> へのリクエストはリストの 3 番目のエントリにマッチします。Django は関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">views.month_archive(request,</span> <span class=\"pre\">year=2005,</span> <span class=\"pre\">month=3)</span></code> を呼び出します。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">/articles/2003/</span></code> はリストの最初のパターンにマッチしますが、2番目のパターンにはマッチしません。なぜなら、パターンはソート順に検査され、最初のパターンが最初に通るからです。ソートを利用して、このような特殊なケースを挿入するのは自由です。ここでは、 Django は関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">views.special_case_2003(request)</span></code> を呼び出します。</p></li>\n<li><p>各パターンはURLの末尾がスラッシュであることを要求するので、<code class=\"docutils literal notranslate\"><span class=\"pre\">/articles/2003</span></code> はこれらのパターンのどれにもマッチしません。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">/articles/2003/03/building-a-django-site/</span></code> は最後のパターンにマッチします。Django は関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">views.article_detail(request,</span> <span class=\"pre\">year=2003,</span> <span class=\"pre\">month=3,</span> <span class=\"pre\">slug=&quot;building-a-django-site&quot;)</span></code> を呼び出します。</p></li>\n</ul>\n</section>\n<section id=\"path-converters\">\n<h2>パス コンバータ<a class=\"heading-anchor\" href=\"#path-converters\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>デフォルトでは、以下のパスコンバータが使用可能です:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">str</span></code> - パスの区切り文字 <code class=\"docutils literal notranslate\"><span class=\"pre\">'/</span></code> を除く、空でない文字列にマッチします。これは式にコンバータが含まれていない場合のデフォルトです。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code> - ゼロまたは任意の正の整数にマッチします。 <code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code> を返します。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">slug</span></code> - ASCII 文字か数字、ハイフン、アンダースコアからなるスラグ文字列にマッチします。たとえば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">building-your-1st-django-site</span></code> のようなものです。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">uuid</span></code> - フォーマットされたUUIDにマッチします。複数のURLが同じページにマッピングされるのを防ぐため、ダッシュを入れ、アルファベットは小文字にする必要があります。たとえば <code class=\"docutils literal notranslate\"><span class=\"pre\">075194d3-6885-417e-a8a8-6c931e272f00</span></code> のようになります。 <a class=\"reference external\" href=\"https://docs.python.org/3/library/uuid.html#uuid.UUID\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">UUID</span></code></a> インスタンスを返します。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">path</span></code> - パスの区切り文字 <code class=\"docutils literal notranslate\"><span class=\"pre\">'/'</span></code> を含む、空ではない文字列にマッチします。これにより、 <code class=\"docutils literal notranslate\"><span class=\"pre\">str</span></code> のようにURLパスのセグメントではなく、完全なURLパスに対してマッチすることができます。</p></li>\n</ul>\n</section>\n<section id=\"registering-custom-path-converters\">\n<span id=\"id2\"></span><h2>独自のパスコンバータを登録する<a class=\"heading-anchor\" href=\"#registering-custom-path-converters\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>より複雑なマッチング要件については、独自のパスコンバータを定義できます。</p>\n<p>コンバーターとは、以下のようなクラスです:</p>\n<ul class=\"simple\">\n<li><p>文字列としての <code class=\"docutils literal notranslate\"><span class=\"pre\">regex</span></code> クラス属性を持ちます。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">to_python(self,</span> <span class=\"pre\">value)</span></code> メソッドで、マッチした文字列をビュー関数に渡す型に変換します。与えられた値を変換できない場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">ValueError</span></code> を発生させます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">ValueError</span></code> はマッチしないと解釈され、別のURLパターンがマッチしない限り、結果として404レスポンスがユーザーに送信されます。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">to_url(self,</span> <span class=\"pre\">value)</span></code> メソッドで、 Python の型を URL で使用する文字列に変換します。与えられた値を変換できない場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">ValueError</span></code> を発生させる必要があります。 <code class=\"docutils literal notranslate\"><span class=\"pre\">ValueError</span></code> はマッチしないと解釈され、結果として <a class=\"reference internal\" href=\"/ja/5.0/ref/urlresolvers/#django.urls.reverse\" title=\"django.urls.reverse\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">reverse()</span></code></a> は <a class=\"reference internal\" href=\"/ja/5.0/ref/exceptions/#django.urls.NoReverseMatch\" title=\"django.urls.NoReverseMatch\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">NoReverseMatch</span></code></a> を発生させます。</p></li>\n</ul>\n<p>例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">FourDigitYearConverter</span><span class=\"p\">:</span>\n    <span class=\"n\">regex</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;[0-9]</span><span class=\"si\">{4}</span><span class=\"s2\">&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">to_python</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">value</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">to_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;</span><span class=\"si\">%04d</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"n\">value</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"/ja/5.0/ref/urls/#django.urls.register_converter\" title=\"django.urls.register_converter\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">register_converter()</span></code></a>: を使用して、URLconf にカスタムコンバータクラスを登録します:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">path</span><span class=\"p\">,</span> <span class=\"n\">register_converter</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">converters</span><span class=\"p\">,</span> <span class=\"n\">views</span>\n\n<span class=\"n\">register_converter</span><span class=\"p\">(</span><span class=\"n\">converters</span><span class=\"o\">.</span><span class=\"n\">FourDigitYearConverter</span><span class=\"p\">,</span> <span class=\"s2\">&quot;yyyy&quot;</span><span class=\"p\">)</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;articles/2003/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">special_case_2003</span><span class=\"p\">),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;articles/&lt;yyyy:year&gt;/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">year_archive</span><span class=\"p\">),</span>\n    <span class=\"o\">...</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</section>\n<section id=\"using-regular-expressions\">\n<h2>正規表現を使う<a class=\"heading-anchor\" href=\"#using-regular-expressions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>パスとコンバータ構文だけでは URL パターンを定義するのに不十分な場合は、正規表現を使うこともできます。その場合は <a class=\"reference internal\" href=\"/ja/5.0/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">path()</span></code></a> の代わりに <a class=\"reference internal\" href=\"/ja/5.0/ref/urls/#django.urls.re_path\" title=\"django.urls.re_path\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">re_path()</span></code></a> を使ってください。</p>\n<p>Python の正規表現では、名前付き正規表現グループの構文は <code class=\"docutils literal notranslate\"><span class=\"pre\">(?P&lt;name&gt;pattern)</span></code> です。ここで <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> はグループの名前で、 <code class=\"docutils literal notranslate\"><span class=\"pre\">pattern</span></code> はマッチするパターンです。</p>\n<p>先ほどのURLconfの例を正規表現を使って書き直したものです:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">path</span><span class=\"p\">,</span> <span class=\"n\">re_path</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;articles/2003/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">special_case_2003</span><span class=\"p\">),</span>\n    <span class=\"n\">re_path</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s2\">&quot;^articles/(?P&lt;year&gt;[0-9]</span><span class=\"si\">{4}</span><span class=\"s2\">)/$&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">year_archive</span><span class=\"p\">),</span>\n    <span class=\"n\">re_path</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s2\">&quot;^articles/(?P&lt;year&gt;[0-9]</span><span class=\"si\">{4}</span><span class=\"s2\">)/(?P&lt;month&gt;[0-9]</span><span class=\"si\">{2}</span><span class=\"s2\">)/$&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">month_archive</span><span class=\"p\">),</span>\n    <span class=\"n\">re_path</span><span class=\"p\">(</span>\n        <span class=\"sa\">r</span><span class=\"s2\">&quot;^articles/(?P&lt;year&gt;[0-9]</span><span class=\"si\">{4}</span><span class=\"s2\">)/(?P&lt;month&gt;[0-9]</span><span class=\"si\">{2}</span><span class=\"s2\">)/(?P&lt;slug&gt;[\\w-]+)/$&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">article_detail</span><span class=\"p\">,</span>\n    <span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>これは、前の例とほぼ同じことを実現します:</p>\n<ul class=\"simple\">\n<li><p>マッチする正確なURLは少し制約があります。たとえば、西暦10000年はマッチしなくなります。西暦の整数は正確に4桁になるように制約されているからです。</p></li>\n<li><p>キャプチャされた各引数は、正規表現がどのようなマッチをするかには関係なく、文字列としてビューに送信されます。</p></li>\n</ul>\n<p><a class=\"reference internal\" href=\"/ja/5.0/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">path()</span></code></a> を使っていたのを <a class=\"reference internal\" href=\"/ja/5.0/ref/urls/#django.urls.re_path\" title=\"django.urls.re_path\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">re_path()</span></code></a> に切り替えたり、その逆を行ったりする場合は、ビューの引数の型が変わる可能性があることに十分注意してください。</p>\n<section id=\"using-unnamed-regular-expression-groups\">\n<h3>名前なし正規表現グループの使用<a class=\"heading-anchor\" href=\"#using-unnamed-regular-expression-groups\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>名前付きグループ構文、例えば <code class=\"docutils literal notranslate\"><span class=\"pre\">(?P&lt;year&gt;[0-9]{4})</span></code> の他に、より短い名前なしグループ、例えば <code class=\"docutils literal notranslate\"><span class=\"pre\">([0-9]{4})</span></code> を使うこともできます。</p>\n<p>このような使い方をすると、マッチの意図した意味とビューの引数との対応を間違えやすくなり、バグが混入しやすくなるので、使わないことを強く推奨します。</p>\n<p>どちらの場合でも、指定した正規表現内で1つのスタイルだけを使用することを推奨します。両方のスタイルが混在している場合、名前のないグループは無視され、名前のあるグループだけがビュー関数に渡されます。</p>\n</section>\n<section id=\"nested-arguments\">\n<h3>ネストされた引数<a class=\"heading-anchor\" href=\"#nested-arguments\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>正規表現ではネストされた引数を使うことができ、Django はこれらを解決してビューに渡します。このとき、Django は全ての外側のキャプチャされた引数を埋めようとし、ネストされたキャプチャされた引数を無視します。任意でページ引数を取る以下の URL パターンを考えてみます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">re_path</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">re_path</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s2\">&quot;^blog/(page-([0-9]+)/)?$&quot;</span><span class=\"p\">,</span> <span class=\"n\">blog_articles</span><span class=\"p\">),</span>  <span class=\"c1\"># bad</span>\n    <span class=\"n\">re_path</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s2\">&quot;^comments/(?:page-(?P&lt;page_number&gt;[0-9]+)/)?$&quot;</span><span class=\"p\">,</span> <span class=\"n\">comments</span><span class=\"p\">),</span>  <span class=\"c1\"># good</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>両方のパターンでネストされた引数を使っており、解決します: 例えば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">blog/page-2/</span></code> は 2 つの潜在的な引数 (<code class=\"docutils literal notranslate\"><span class=\"pre\">page-2/</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">2</span></code>) で <code class=\"docutils literal notranslate\"><span class=\"pre\">blog_articles</span></code> と一致する結果となります。<code class=\"docutils literal notranslate\"><span class=\"pre\">comments</span></code> の 2 番目のパターンは、2 にセットされたキーワード引数 <code class=\"docutils literal notranslate\"><span class=\"pre\">page_number</span></code> で <code class=\"docutils literal notranslate\"><span class=\"pre\">comments/page-2/</span></code> と一致します。  この例での外部の引数は、キャプチャされない引数 <code class=\"docutils literal notranslate\"><span class=\"pre\">(?:...)</span></code> です。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">blog_articles</span></code> ビューは一番外側のキャプチャされた引数が解決されるのを必要としますが (この例では <code class=\"docutils literal notranslate\"><span class=\"pre\">page-2/</span></code> か引数なし)、<code class=\"docutils literal notranslate\"><span class=\"pre\">comments</span></code> は引数なしか <code class=\"docutils literal notranslate\"><span class=\"pre\">page_number</span></code> に対する値のどちらかで解決できます。</p>\n<p>ネストされたキャプチャされた引数は、<code class=\"docutils literal notranslate\"><span class=\"pre\">blog_articles</span></code> (ビューが興味を持つ値だけでなく URL <code class=\"docutils literal notranslate\"><span class=\"pre\">page-2/</span></code> の部分を受け取るビュー) によって示されるように、ビュー引数と URL の間に強力な結合を作ります: この結合は、ビューを解決する際にページ番号ではなくURLの部分を渡す必要があるため、解決するときにはさらに顕著になります。</p>\n<p>経験則として、正規表現が引数を必要とする一方でビューがそれを無視するときには、ビューが必要とする値だけをキャプチャして、キャプチャしない引数を使ってください。</p>\n</section>\n</section>\n<section id=\"what-the-urlconf-searches-against\">\n<h2>URLconf の検索対象<a class=\"heading-anchor\" href=\"#what-the-urlconf-searches-against\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>URLconf はリクエストされた URL を通常の Python 文字列として検索します。これには GET や POST パラメータ、ドメイン名は含まれません。</p>\n<p>たとえば、<code class=\"docutils literal notranslate\"><span class=\"pre\">https://www.example.com/myapp/</span></code> へのリクエストでは、URLconf は <code class=\"docutils literal notranslate\"><span class=\"pre\">myapp/</span></code> を探します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">https://www.example.com/myapp/?page=3</span></code> へのリクエストでは、URLconf は <code class=\"docutils literal notranslate\"><span class=\"pre\">myapp/</span></code> を探します。</p>\n<p>URLconf はリクエストメソッドを見ません。つまり、すべてのリクエストメソッド (<code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">HEAD</span></code> など) は同じURLの同じ関数にルーティングされます。</p>\n</section>\n<section id=\"specifying-defaults-for-view-arguments\">\n<h2>ビュー引数のデフォルト値を指定する<a class=\"heading-anchor\" href=\"#specifying-defaults-for-view-arguments\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>便利なテクニックは、ビューの引数にデフォルトのパラメータを指定することです。以下は URLconf とビューの例です:</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=\"c1\"># URLconf</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">path</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;blog/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">page</span><span class=\"p\">),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;blog/page&lt;int:num&gt;/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">page</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n\n\n<span class=\"c1\"># View (in blog/views.py)</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">page</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">num</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">):</span>\n    <span class=\"c1\"># Output the appropriate page of blog entries, according to num.</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>上記の例では、URLパターンはどちらも同じビュー、 <code class=\"docutils literal notranslate\"><span class=\"pre\">views.page</span></code> を指していますが、最初のパターンはURLから何も取得していません。最初のパターンにマッチした場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">page()</span></code> 関数は <code class=\"docutils literal notranslate\"><span class=\"pre\">num</span></code> のデフォルト引数である <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> を使用します。2番目のパターンにマッチした場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">page()</span></code> はキャプチャされた <code class=\"docutils literal notranslate\"><span class=\"pre\">num</span></code> の値を使用します。</p>\n</section>\n<section id=\"performance\">\n<h2>パフォーマンス<a class=\"heading-anchor\" href=\"#performance\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django は <code class=\"docutils literal notranslate\"><span class=\"pre\">urlpatterns</span></code> リストにある正規表現を処理します。それ以降のリクエストでは、 URL リゾルバ経由でキャッシュされた設定を使います。</p>\n</section>\n<section id=\"syntax-of-the-urlpatterns-variable\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">urlpatterns</span></code> 変数の構文<a class=\"heading-anchor\" href=\"#syntax-of-the-urlpatterns-variable\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">urlpatterns</span></code> は <a class=\"reference internal\" href=\"/ja/5.0/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.urls.path()</span></code></a> または <a class=\"reference internal\" href=\"/ja/5.0/ref/urls/#django.urls.re_path\" title=\"django.urls.re_path\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.urls.re_path()</span></code></a> インスタンスの <a class=\"reference external\" href=\"https://docs.python.org/3/glossary.html#term-sequence\" title=\"(in Python v3.14)\"><span class=\"xref std std-term\">sequence</span></a> でなければなりません。</p>\n</section>\n<section id=\"error-handling\">\n<h2>エラーハンドリング<a class=\"heading-anchor\" href=\"#error-handling\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django がリクエストされた URL にマッチするものを見つけられなかったり、例外 が発生したりすると、Django はエラーハンドリングビューを起動します。</p>\n<p>これらのケースで使用するビューは、4種類の変数で指定します。ほとんどのプロジェクトではデフォルト値で十分ですが、デフォルト値を上書きすることでさらにカスタマイズできます。</p>\n<p>詳細は <a class=\"reference internal\" href=\"/ja/5.0/topics/http/views/#customizing-error-views\"><span class=\"std std-ref\">エラービューをカスタマイズする</span></a> を参照してください。</p>\n<p>このような値はルートの URLconf で設定できます。他の URLconf でこれらの変数を設定しても意味はありません。</p>\n<p>値は呼び出し可能オブジェクト、つまり、エラー状態を処理するために呼び出すべきビューへの Python インポートパスを表す文字列でなければなりません。</p>\n<p>変数の種類は下記です。</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">handler400</span></code> -- <a class=\"reference internal\" href=\"/ja/5.0/ref/urls/#django.conf.urls.handler400\" title=\"django.conf.urls.handler400\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">django.conf.urls.handler400</span></code></a> を参照。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">handler403</span></code> -- <a class=\"reference internal\" href=\"/ja/5.0/ref/urls/#django.conf.urls.handler403\" title=\"django.conf.urls.handler403\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">django.conf.urls.handler403</span></code></a> を参照。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">handler404</span></code> -- <a class=\"reference internal\" href=\"/ja/5.0/ref/urls/#django.conf.urls.handler404\" title=\"django.conf.urls.handler404\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">django.conf.urls.handler404</span></code></a> を参照。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">handler500</span></code> -- <a class=\"reference internal\" href=\"/ja/5.0/ref/urls/#django.conf.urls.handler500\" title=\"django.conf.urls.handler500\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">django.conf.urls.handler500</span></code></a> を参照。</p></li>\n</ul>\n</section>\n<section id=\"including-other-urlconfs\">\n<span id=\"id3\"></span><h2>他の URLconfs をインクルードする<a class=\"heading-anchor\" href=\"#including-other-urlconfs\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>いずれの時点でも、<code class=\"docutils literal notranslate\"><span class=\"pre\">urlpatterns</span></code> は他の URLconf モジュールを &quot;含む (インクルードする)&quot; ことができます。これは基本的に、他の URL パターンに定義されている URL のセットを探索します。</p>\n<p>例えば、以下は <a class=\"reference external\" href=\"https://www.djangoproject.com/\">Django website</a> 自体に対する URLconf の引用です。これは複数の他の URLconfs をインクルードしています:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">include</span><span class=\"p\">,</span> <span class=\"n\">path</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"c1\"># ... snip ...</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;community/&quot;</span><span class=\"p\">,</span> <span class=\"n\">include</span><span class=\"p\">(</span><span class=\"s2\">&quot;aggregator.urls&quot;</span><span class=\"p\">)),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;contact/&quot;</span><span class=\"p\">,</span> <span class=\"n\">include</span><span class=\"p\">(</span><span class=\"s2\">&quot;contact.urls&quot;</span><span class=\"p\">)),</span>\n    <span class=\"c1\"># ... snip ...</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Django が <a class=\"reference internal\" href=\"/ja/5.0/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a> に出会うたびに、そのポイントまでにマッチした URL の部分を切り落とし、残りの文字列を、インクルードされた URLconf へ渡し、次の処理が行われます。</p>\n<p>他の方法として、 <a class=\"reference internal\" href=\"/ja/5.0/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">path()</span></code></a> インスタンスのリストを使うことによって追加的な URL をインクルードすることもできます。例えば、以下の URLconf があったとします:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">include</span><span class=\"p\">,</span> <span class=\"n\">path</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">apps.main</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span> <span class=\"k\">as</span> <span class=\"n\">main_views</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">credit</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span> <span class=\"k\">as</span> <span class=\"n\">credit_views</span>\n\n<span class=\"n\">extra_patterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;reports/&quot;</span><span class=\"p\">,</span> <span class=\"n\">credit_views</span><span class=\"o\">.</span><span class=\"n\">report</span><span class=\"p\">),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;reports/&lt;int:id&gt;/&quot;</span><span class=\"p\">,</span> <span class=\"n\">credit_views</span><span class=\"o\">.</span><span class=\"n\">report</span><span class=\"p\">),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;charge/&quot;</span><span class=\"p\">,</span> <span class=\"n\">credit_views</span><span class=\"o\">.</span><span class=\"n\">charge</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span> <span class=\"n\">main_views</span><span class=\"o\">.</span><span class=\"n\">homepage</span><span class=\"p\">),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;help/&quot;</span><span class=\"p\">,</span> <span class=\"n\">include</span><span class=\"p\">(</span><span class=\"s2\">&quot;apps.help.urls&quot;</span><span class=\"p\">)),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;credit/&quot;</span><span class=\"p\">,</span> <span class=\"n\">include</span><span class=\"p\">(</span><span class=\"n\">extra_patterns</span><span class=\"p\">)),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>この例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">/credit/reports/</span></code> という URL は <code class=\"docutils literal notranslate\"><span class=\"pre\">credit_views.report()</span></code> というビューによって処理されます。</p>\n<p>これを使うと、単一のパターンの接頭辞が繰り返し使われるような URLconf の冗長さを回避できます。例えば、以下の URLconf を考えてみます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">path</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;&lt;page_slug&gt;-&lt;page_id&gt;/history/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">history</span><span class=\"p\">),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;&lt;page_slug&gt;-&lt;page_id&gt;/edit/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">edit</span><span class=\"p\">),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;&lt;page_slug&gt;-&lt;page_id&gt;/discuss/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">discuss</span><span class=\"p\">),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;&lt;page_slug&gt;-&lt;page_id&gt;/permissions/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">permissions</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>これは、パスの共通部分である接頭辞を一度だけ記述し、異なる接尾辞を以下のようにグループ化することで改善できます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">include</span><span class=\"p\">,</span> <span class=\"n\">path</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;&lt;page_slug&gt;-&lt;page_id&gt;/&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">include</span><span class=\"p\">(</span>\n            <span class=\"p\">[</span>\n                <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;history/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">history</span><span class=\"p\">),</span>\n                <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;edit/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">edit</span><span class=\"p\">),</span>\n                <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;discuss/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">discuss</span><span class=\"p\">),</span>\n                <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;permissions/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">permissions</span><span class=\"p\">),</span>\n            <span class=\"p\">]</span>\n        <span class=\"p\">),</span>\n    <span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<section id=\"captured-parameters\">\n<h3>取り込まれたパラメータ<a class=\"heading-anchor\" href=\"#captured-parameters\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>インクルードされた URLconf は親の URLconf から取り込まれた全てのパラメータを受け取るので、以下の例は有効です:</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=\"c1\"># In settings/urls/main.py</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">include</span><span class=\"p\">,</span> <span class=\"n\">path</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;&lt;username&gt;/blog/&quot;</span><span class=\"p\">,</span> <span class=\"n\">include</span><span class=\"p\">(</span><span class=\"s2\">&quot;foo.urls.blog&quot;</span><span class=\"p\">)),</span>\n<span class=\"p\">]</span>\n\n<span class=\"c1\"># In foo/urls/blog.py</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">path</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">blog</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;archive/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">blog</span><span class=\"o\">.</span><span class=\"n\">archive</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>上の例では、取り込まれた <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;username&quot;</span></code> 変数はインクルードされたURLconf に渡されます。</p>\n</section>\n</section>\n<section id=\"passing-extra-options-to-view-functions\">\n<span id=\"views-extra-options\"></span><h2>追加的なオプションをビュー関数に渡す<a class=\"heading-anchor\" href=\"#passing-extra-options-to-view-functions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>URLconfs は、Ptyhon のディクショナリとして、ビュー関数に追加の引数を引き渡せるようにするフックを持っています。</p>\n<p><a class=\"reference internal\" href=\"/ja/5.0/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">path()</span></code></a> 関数はオプションで第3引数を取ることができます。第3引数にはビュー関数に渡す追加のキーワード引数の辞書を指定します。</p>\n<p>例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">path</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;blog/&lt;int:year&gt;/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">year_archive</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;bar&quot;</span><span class=\"p\">}),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>この例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">/blog/2005/</span></code> へのリクエストに対して、Django は <code class=\"docutils literal notranslate\"><span class=\"pre\">views.year_archive(request,</span> <span class=\"pre\">year=2005,</span> <span class=\"pre\">foo='bar')</span></code> を呼び出します。</p>\n<p>このテクニックは <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/syndication/\"><span class=\"doc\">配信フィードフレームワーク</span></a> で使われ、メタデータとオプションをビューに引き渡します。</p>\n<aside class=\"admonition-dealing-with-conflicts admonition\">\n<p class=\"admonition-title\">競合を解決する</p>\n<p>名付けられたキーワード引数をキャプチャする URL パターンを使うこともできます。これは、追加の引数のディクショナリ内と同じ名前の引数を引き渡します。このとき、URL 内でキャプチャされた引数ではなく、ディクショナリ内の引数が使われます。</p>\n</aside>\n<section id=\"passing-extra-options-to-include\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">include()</span></code> に追加のオプションを引き渡す<a class=\"heading-anchor\" href=\"#passing-extra-options-to-include\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>同様に、 <a class=\"reference internal\" href=\"/ja/5.0/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a> に追加オプションを渡すと、 インクルードされた URLconf の各行に追加オプションが渡されます。</p>\n<p>例えば、以下の 2 つの URLconf のセットはまったく同じように機能します:</p>\n<p>セット 1:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># main.py</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">include</span><span class=\"p\">,</span> <span class=\"n\">path</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;blog/&quot;</span><span class=\"p\">,</span> <span class=\"n\">include</span><span class=\"p\">(</span><span class=\"s2\">&quot;inner&quot;</span><span class=\"p\">),</span> <span class=\"p\">{</span><span class=\"s2\">&quot;blog_id&quot;</span><span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">}),</span>\n<span class=\"p\">]</span>\n\n<span class=\"c1\"># inner.py</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">path</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">mysite</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;archive/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">archive</span><span class=\"p\">),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;about/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">about</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>セット 2:</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=\"c1\"># main.py</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">include</span><span class=\"p\">,</span> <span class=\"n\">path</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">mysite</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;blog/&quot;</span><span class=\"p\">,</span> <span class=\"n\">include</span><span class=\"p\">(</span><span class=\"s2\">&quot;inner&quot;</span><span class=\"p\">)),</span>\n<span class=\"p\">]</span>\n\n<span class=\"c1\"># inner.py</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">path</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;archive/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">archive</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;blog_id&quot;</span><span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">}),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;about/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">about</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;blog_id&quot;</span><span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">}),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>行のビューが実際にそれらのオプションを有効として受け入れるかどうかに関わらず、追加のオプションが <em>常に</em> インクルードされている URLconfの <em>すべての</em> 行に引き渡されることに注意してください。 このため、このテクニックは、インクルードされた URLconf のすべてのビューが、引き渡される追加のオプションを受け入れることが確実である場合にのみ役立ちます。</p>\n</section>\n</section>\n<section id=\"reverse-resolution-of-urls\">\n<h2>URL の逆引き<a class=\"heading-anchor\" href=\"#reverse-resolution-of-urls\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django プロジェクトで作業するときの一般的なニーズとして、生成されたコンテンツ (ビューとアセットのURL、ユーザーに表示されるURLなど) への埋め込み、またはサーバーサイドでのナビゲーションフローの処理 (リダイレクトなど) のどちらかに対して、最終的なフォーム内で URL を取得することが挙げられます。</p>\n<p>こうした URL のハードコーディング (手間がかかり、スケールしにくく、誤りが起こりやすい戦略) は、避けることが強く望まれます。 同様に危険なのは、URLconf で記述された設計と並行して URL を生成するような一時的な仕組みを考え出してしまうことです。これは、時間の経過とともに古くて使えない URL が生成されてしまう原因となります。</p>\n<p>言い換えると、必要なのはDRYな仕組みです。 数々の利点の中でも、これは URL 設計が進化していけるようにします。プロジェクトソースコードを全て検索して古い URL を置換する必要はありません。</p>\n<p>URLを取得するために利用可能な主な情報は、それを扱うビューの識別（例えば名前）です。正しい URL を探し出すために必要な他の情報は、ビューの引数の型 (位置、キーワード) と値です。</p>\n<p>Django は URL マッパーが URL 設計の唯一のリポジトリとなるような解決策を提供します。URLconfを入力すると、双方向で使用できます:</p>\n<ul class=\"simple\">\n<li><p>ユーザ/ブラウザから要求された URL を起点に、URL から抽出した値で必要な引数を与え、適切な Django ビューを呼び出します。</p></li>\n<li><p>Djangoにおいて、特定のビューとそれに渡される引数の値を特定した上で、関連するURLを取得するプロセスが存在します。このプロセスでは、ビューの識別と引数の値をもとに、それに紐づくURLを生成または特定できます。</p></li>\n</ul>\n<p>最初のものは、前のセクションで説明した使い方です。もう1つは、 <em>URLの逆解決</em> 、 <em>逆URLマッチング</em> 、 <em>逆URLルックアップ</em> 、あるいは単に <em>URLの逆引き</em> として知られているものです。</p>\n<p>Django は、 URL が必要とされる様々なレイヤにマッチする URL の逆引きを実行するためのツールを提供します:</p>\n<ul class=\"simple\">\n<li><p>テンプレートでは: <a class=\"reference internal\" href=\"/ja/5.0/ref/templates/builtins/#std-templatetag-url\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">url</span></code></a> を使います。</p></li>\n<li><p>Pythonコードでは: <a class=\"reference internal\" href=\"/ja/5.0/ref/urlresolvers/#django.urls.reverse\" title=\"django.urls.reverse\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">reverse()</span></code></a> 関数を使います。</p></li>\n<li><p>Django モデルインスタンスの URL のハンドリングに関連する、より高レベルのコードでは: <a class=\"reference internal\" href=\"/ja/5.0/ref/models/instances/#django.db.models.Model.get_absolute_url\" title=\"django.db.models.Model.get_absolute_url\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_absolute_url()</span></code></a> を使います。</p></li>\n</ul>\n<section id=\"examples\">\n<h3>例<a class=\"heading-anchor\" href=\"#examples\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>このURLconfのエントリーについてもう一度考えてみましょう:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">path</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;articles/&lt;int:year&gt;/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">year_archive</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;news-year-archive&quot;</span><span class=\"p\">),</span>\n    <span class=\"c1\"># ...</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>この設計によると、 <em>nnnn</em> 年に対応するアーカイブのURLは <code class=\"docutils literal notranslate\"><span class=\"pre\">/articles/&lt;nnnn&gt;/</span></code> です。</p>\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\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">url</span> <span class=\"s1\">&#39;news-year-archive&#39;</span> <span class=\"m\">2012</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>2012 Archive<span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;</span>\n<span class=\"c\">{# Or with the year in a template context variable: #}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">yearvar</span> <span class=\"k\">in</span> <span class=\"nv\">year_list</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\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">url</span> <span class=\"s1\">&#39;news-year-archive&#39;</span> <span class=\"nv\">yearvar</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">yearvar</span> <span class=\"cp\">}}</span> Archive<span class=\"p\">&lt;/</span><span class=\"nt\">a</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\">ul</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>または Python コードで次のようにします:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponseRedirect</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">reverse</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">redirect_to_year</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"n\">year</span> <span class=\"o\">=</span> <span class=\"mi\">2006</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponseRedirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s2\">&quot;news-year-archive&quot;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">year</span><span class=\"p\">,)))</span>\n</code></pre></div>\n<p>もし何らかの理由で、年間記事アーカイブのコンテンツが公開されるURLを変更することになった場合、URLconfのエントリを変更するだけです。</p>\n<p>ビューが一般的なものである場合、URLとビューの間に多対一の関係が存在することがあります。このような場合、 URL を反転させるときに、ビュー名は十分な識別子ではありません。Django が提供する解決策を知るには、次の節を読んでください。</p>\n</section>\n</section>\n<section id=\"naming-url-patterns\">\n<span id=\"id4\"></span><h2>URL パターンに名前をつける<a class=\"heading-anchor\" href=\"#naming-url-patterns\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>URL のリバースを処理するためには、上述の例で行ったように <strong>名前をつけられた URL パターン</strong> を使う必要があります。URL 名として使う文字列には、どんな文字でも含めることができます。Python の有効な名前に制限を受けません。</p>\n<p>URL パターンに名前をつけるときは、他のアプリケーションが選んだ名前と衝突しにくい名前を選んでください。URL パターンを <code class=\"docutils literal notranslate\"><span class=\"pre\">comment</span></code> と命名し、他のアプリケーションが同じことをした場合、 <a class=\"reference internal\" href=\"/ja/5.0/ref/urlresolvers/#django.urls.reverse\" title=\"django.urls.reverse\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">reverse()</span></code></a> が見つける URL は、プロジェクトの <code class=\"docutils literal notranslate\"><span class=\"pre\">urlpatterns</span></code> リストの最後にあるパターンに依存します。</p>\n<p>URL名にプレフィックス、例えばアプリケーション名から派生したもの（ <code class=\"docutils literal notranslate\"><span class=\"pre\">comment</span></code> の代わりに <code class=\"docutils literal notranslate\"><span class=\"pre\">myapp-comment</span></code> など）を付けると、衝突の可能性を減らせます。</p>\n<p>ビューをオーバーライドしたい場合、他のアプリケーションと <em>同じURL名</em> を意図的に選択できます。たとえば、よくある使用例は <a class=\"reference internal\" href=\"/ja/5.0/topics/auth/default/#django.contrib.auth.views.LoginView\" title=\"django.contrib.auth.views.LoginView\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">LoginView</span></code></a> をオーバーライドすることです。Django の一部やほとんどのサードパーティアプリは、このビューが <code class=\"docutils literal notranslate\"><span class=\"pre\">login</span></code> という名前の URL パターンを持っていると仮定しています。カスタムログインビューがあり、その URL に <code class=\"docutils literal notranslate\"><span class=\"pre\">login</span></code> という名前をつけている場合、 <a class=\"reference internal\" href=\"/ja/5.0/ref/urlresolvers/#django.urls.reverse\" title=\"django.urls.reverse\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">reverse()</span></code></a> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.auth.urls</span></code> がインクルードされた後の <code class=\"docutils literal notranslate\"><span class=\"pre\">urlpatterns</span></code> にある限り（すべてを探して含まれていれば）、カスタムビューを見つけます。</p>\n<p>引数が異なれば、複数の URL パターンに同じ名前を使うこともできます。URL 名に加えて、 <a class=\"reference internal\" href=\"/ja/5.0/ref/urlresolvers/#django.urls.reverse\" title=\"django.urls.reverse\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">reverse()</span></code></a> は引数の数とキーワード引数の名前もマッチします。パスコンバータは、マッチしなかったことを示すために <code class=\"docutils literal notranslate\"><span class=\"pre\">ValueError</span></code> を発生させることがあります。詳細は <a class=\"reference internal\" href=\"#registering-custom-path-converters\"><span class=\"std std-ref\">独自のパスコンバータを登録する</span></a> を参照してください。</p>\n</section>\n<section id=\"url-namespaces\">\n<span id=\"topics-http-defining-url-namespaces\"></span><h2>URL の名前空間<a class=\"heading-anchor\" href=\"#url-namespaces\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"introduction\">\n<h3>はじめに<a class=\"heading-anchor\" href=\"#introduction\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>URL名前空間を使用すると、異なるアプリケーションが同じURL名を使用していても、 <a class=\"reference internal\" href=\"#naming-url-patterns\"><span class=\"std std-ref\">名前付きURLパターン</span></a> を一意に逆引きできます。サードパーティアプリは常に名前空間付きのURLを使用することが良い習慣です（チュートリアルで行ったように）。同様に、アプリケーションの複数のインスタンスがデプロイされている場合にURLを逆引きすることも可能にします。言い換えれば、単一のアプリケーションの複数のインスタンスが名前付きURLを共有する場合、名前空間はこれらの名前付きURLを区別する方法を提供します。</p>\n<p>URL の名前空間を適切に使用する Django アプリケーションは、特定のサイトに対して何回でもデプロイできます。 たとえば <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/admin/#module-django.contrib.admin\" title=\"django.contrib.admin: Django's admin site.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.admin</span></code></a> には <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/admin/#django.contrib.admin.AdminSite\" title=\"django.contrib.admin.AdminSite\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AdminSite</span></code></a> クラスがあり、 <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/admin/#multiple-admin-sites\"><span class=\"std std-ref\">admin のインスタンスを複数回デプロイ</span></a> することができます。後者の例では、2 つの異なるユーザー (著者と出版者) に同じ機能を提供できるよう、チュートリアルで扱った polls アプリケーションを例に、2 つの異なる場所にデプロイするという考え方について説明します。</p>\n<p>URL の名前空間は 2 つの部分に分かれ、両方とも文字列で表されます:</p>\n<dl class=\"simple glossary\">\n<dt id=\"term-application-namespace\">アプリケーションの名前空間<a class=\"heading-anchor\" href=\"#term-application-namespace\"><span class=\"visually-hidden\">Link to this term</span><span aria-hidden=\"true\">#</span></a></dt><dd><p>デプロイされているアプリケーションの名前を示します。 単一のアプリケーションのすべてのインスタンスは、同一のアプリケーション名前空間を持ちます。 例えば、Django の admin アプリケーションには、<code class=\"docutils literal notranslate\"><span class=\"pre\">'admin'</span></code> という比較的分かりやすいアプリケーション名前空間を持っています。</p>\n</dd>\n<dt id=\"term-instance-namespace\">インスタンスの名前空間<a class=\"heading-anchor\" href=\"#term-instance-namespace\"><span class=\"visually-hidden\">Link to this term</span><span aria-hidden=\"true\">#</span></a></dt><dd><p>アプリケーションの特定のインスタンスを識別します。 インスタンス名前空間は、プロジェクト全体で一意である必要があります。ただし、インスタンス名前空間は、アプリケーション名前空間と同じにすることができます。これは、アプリケーションのデフォルトインスタンスを指定するために使用されます。 例えば、デフォルトの Django admin インスタンスは <code class=\"docutils literal notranslate\"><span class=\"pre\">'admin'</span></code> というインスタンス名前空間を持っています。</p>\n</dd>\n</dl>\n<p>名前空間の URL は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">':'</span></code> 演算子を使って指定します。 たとえば、admin アプリケーションのメインインデックスページは <code class=\"docutils literal notranslate\"><span class=\"pre\">'admin:index'</span></code> で参照されます。 これは <code class=\"docutils literal notranslate\"><span class=\"pre\">'admin'</span></code> という名前空間と <code class=\"docutils literal notranslate\"><span class=\"pre\">'index'</span></code> という名前の URL を示します。</p>\n<p>名前空間はネストすることもできます。 名前付きの URL <code class=\"docutils literal notranslate\"><span class=\"pre\">'sports:polls:index'</span></code> は、トップレベルの名前空間 <code class=\"docutils literal notranslate\"><span class=\"pre\">'sports'</span></code> 内で定義されている名前空間 <code class=\"docutils literal notranslate\"><span class=\"pre\">'polls'</span></code> 内で <code class=\"docutils literal notranslate\"><span class=\"pre\">'index'</span></code> と名前がつけられたパターンを探します。</p>\n</section>\n<section id=\"reversing-namespaced-urls\">\n<span id=\"topics-http-reversing-url-namespaces\"></span><h3>名前空間の URL を逆引きする<a class=\"heading-anchor\" href=\"#reversing-namespaced-urls\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>名前空間の URL (例: <code class=\"docutils literal notranslate\"><span class=\"pre\">'polls:index'</span></code>) が与えられると、Django 完全修飾名をパーツに分割し、以下のルックアップを試みます:</p>\n<ol class=\"arabic\">\n<li><p>まず最初に、Django は <a class=\"reference internal\" href=\"#term-application-namespace\"><span class=\"xref std std-term\">アプリケーションの名前空間</span></a> (ここでは <code class=\"docutils literal notranslate\"><span class=\"pre\">'polls'</span></code>) との一致を検索します。これは、このアプリケーションのインスタンスのリストを生成します。</p></li>\n<li><p>現在のアプリケーションが定義されている場合、Django はそのインスタンスに対して URL リゾルバを探し出し、返します。現在のアプリケーションは <a class=\"reference internal\" href=\"/ja/5.0/ref/urlresolvers/#django.urls.reverse\" title=\"django.urls.reverse\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">reverse()</span></code></a> 関数への <code class=\"docutils literal notranslate\"><span class=\"pre\">current_app</span></code> 引数で指定できます。</p>\n<p><a class=\"reference internal\" href=\"/ja/5.0/ref/templates/builtins/#std-templatetag-url\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">url</span></code></a> テンプレートタグは、<a class=\"reference internal\" href=\"/ja/5.0/ref/templates/api/#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RequestContext</span></code></a> 内で現在のアプリケーションとされているビューの名前空間を使います。このデフォルト設定は、<a class=\"reference internal\" href=\"/ja/5.0/ref/request-response/#django.http.HttpRequest.current_app\" title=\"django.http.HttpRequest.current_app\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">request.current_app</span></code></a> 属性で現在のアプリケーションを設定することでオーバーライドできます。</p>\n</li>\n<li><p>現在のアプリケーションがない場合、Django はデフォルトのアプリケーションインスタンスを探します。デフォルトのアプリケーションインスタンスは、 <a class=\"reference internal\" href=\"#term-application-namespace\"><span class=\"xref std std-term\">application namespace</span></a> と一致する <a class=\"reference internal\" href=\"#term-instance-namespace\"><span class=\"xref std std-term\">instance namespace</span></a> を持つインスタンスです。 (ここでは <code class=\"docutils literal notranslate\"><span class=\"pre\">'polls'</span></code> と呼ばれる <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code> のインスタンスです).</p></li>\n<li><p>デフォルトのアプリケーションインスタンスがない場合、Django は、そのインスタンス名が何であれ、アプリケーションの最後にデプロイされたインスタンスを利用します。</p></li>\n<li><p>提供された名前空間がステップ 1 の <a class=\"reference internal\" href=\"#term-application-namespace\"><span class=\"xref std std-term\">application namespace</span></a> と一致しない場合、Django は名前空間のルックアップを <a class=\"reference internal\" href=\"#term-instance-namespace\"><span class=\"xref std std-term\">instance namespace</span></a> として直接試みます。</p></li>\n</ol>\n<p>ネストされた名前空間がある場合、これらのステップはビューの名前のみが未解決になるまで名前空間の各パートに対して繰り返されます。その後に、このビュー名は見つかった名前空間内の URL として解決されます。</p>\n<section id=\"id5\">\n<h4>カスタマイズ例<a class=\"heading-anchor\" href=\"#id5\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>実際の名前解決戦略を示すため、チュートリアルで扱った <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code> アプリケーションの 2 つのインスタンスの例を考えてみましょう: 1 つは <code class=\"docutils literal notranslate\"><span class=\"pre\">'author-polls'</span></code>、もう 1 つは <code class=\"docutils literal notranslate\"><span class=\"pre\">'publisher-polls'</span></code> と名付けられています。polls を作成して表示するときにインスタンス名前空間を考慮するように、そのアプリケーションを拡張したとします。</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">urls.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">include</span><span class=\"p\">,</span> <span class=\"n\">path</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;author-polls/&quot;</span><span class=\"p\">,</span> <span class=\"n\">include</span><span class=\"p\">(</span><span class=\"s2\">&quot;polls.urls&quot;</span><span class=\"p\">,</span> <span class=\"n\">namespace</span><span class=\"o\">=</span><span class=\"s2\">&quot;author-polls&quot;</span><span class=\"p\">)),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;publisher-polls/&quot;</span><span class=\"p\">,</span> <span class=\"n\">include</span><span class=\"p\">(</span><span class=\"s2\">&quot;polls.urls&quot;</span><span class=\"p\">,</span> <span class=\"n\">namespace</span><span class=\"o\">=</span><span class=\"s2\">&quot;publisher-polls&quot;</span><span class=\"p\">)),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">polls/urls.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">path</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n\n<span class=\"n\">app_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;polls&quot;</span>\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">IndexView</span><span class=\"o\">.</span><span class=\"n\">as_view</span><span class=\"p\">(),</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;index&quot;</span><span class=\"p\">),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;&lt;int:pk&gt;/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">DetailView</span><span class=\"o\">.</span><span class=\"n\">as_view</span><span class=\"p\">(),</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;detail&quot;</span><span class=\"p\">),</span>\n    <span class=\"o\">...</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>この設定を使うことで、以下のルックアップが可能となります:</p>\n<ul>\n<li><p>インスタンスの一つが現在参照されている場合（例えば、インスタンス <code class=\"docutils literal notranslate\"><span class=\"pre\">'author-polls'</span></code> の詳細ページをレンダリングしている場合） <code class=\"docutils literal notranslate\"><span class=\"pre\">'polls:index'</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">'author-polls'</span></code> インスタンスのインデックスページを解決します。つまり、以下のどちらも <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;/author-polls/&quot;</span></code> という結果になります。</p>\n<p>クラスベースビューのメソッド内:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s2\">&quot;polls:index&quot;</span><span class=\"p\">,</span> <span class=\"n\">current_app</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">resolver_match</span><span class=\"o\">.</span><span class=\"n\">namespace</span><span class=\"p\">)</span>\n</code></pre></div>\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=\"cp\">{%</span> <span class=\"k\">url</span> <span class=\"s1\">&#39;polls:index&#39;</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n</li>\n<li><p>現在のインスタンスがない場合（例えば、サイトの他の場所でページをレンダリングしている場合） <code class=\"docutils literal notranslate\"><span class=\"pre\">'polls:index'</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code> の最後に登録されたインスタンスに名前解決されます。デフォルトのインスタンス (<code class=\"docutils literal notranslate\"><span class=\"pre\">'polls'</span></code> のインスタンス名前空間) がないため、登録された最後の <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code> のインスタンスが使用されます。これは、<code class=\"docutils literal notranslate\"><span class=\"pre\">urlpatterns</span></code> で最後に宣言されている <code class=\"docutils literal notranslate\"><span class=\"pre\">'publisher-polls'</span></code> になります。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'author-polls:index'</span></code> は、常に <code class=\"docutils literal notranslate\"><span class=\"pre\">'author-polls'</span></code> のインスタンスのインデックスページに名前解決します (そして <code class=\"docutils literal notranslate\"><span class=\"pre\">'publisher-polls'</span></code> に対しても同じです) .</p></li>\n</ul>\n<p>デフォルトのインスタンス、つまり <code class=\"docutils literal notranslate\"><span class=\"pre\">'polls'</span></code> という名前のインスタンスがある場合、上記からの唯一の変更点は現在のインスタンスがない場合（上記リストの2番目の項目）です。この場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">'polls:index'</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">urlpatterns</span></code> で最後に宣言されたインスタンスの代わりにデフォルトインスタンスのインデックスページに名前解決されます。</p>\n</section>\n</section>\n<section id=\"url-namespaces-and-included-urlconfs\">\n<span id=\"namespaces-and-include\"></span><h3>URLの名前空間とインクルードされた URLconfs<a class=\"heading-anchor\" href=\"#url-namespaces-and-included-urlconfs\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>インクルードされた URLconfs のアプリケーション名前空間は、2 つの方法で指定できます。</p>\n<p>1 つめは、インクルードされた URLconf で <code class=\"docutils literal notranslate\"><span class=\"pre\">app_name</span></code> 属性をセットする方法で、これは <code class=\"docutils literal notranslate\"><span class=\"pre\">urlpatterns</span></code> 属性と同じレベルに記述します。<code class=\"docutils literal notranslate\"><span class=\"pre\">urlpatterns</span></code> のリスト自体ではなく、実際のモジュールないし <a class=\"reference internal\" href=\"/ja/5.0/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a> への文字列参照に対して引き渡す必要があります。</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">polls/urls.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">path</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n\n<span class=\"n\">app_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;polls&quot;</span>\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">IndexView</span><span class=\"o\">.</span><span class=\"n\">as_view</span><span class=\"p\">(),</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;index&quot;</span><span class=\"p\">),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;&lt;int:pk&gt;/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">DetailView</span><span class=\"o\">.</span><span class=\"n\">as_view</span><span class=\"p\">(),</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;detail&quot;</span><span class=\"p\">),</span>\n    <span class=\"o\">...</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">urls.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">include</span><span class=\"p\">,</span> <span class=\"n\">path</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;polls/&quot;</span><span class=\"p\">,</span> <span class=\"n\">include</span><span class=\"p\">(</span><span class=\"s2\">&quot;polls.urls&quot;</span><span class=\"p\">)),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">polls.urls</span></code> 内で定義された URL は、アプリケーション名前空間 <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code> を持ちます。</p>\n<p>2つめは、埋め込みの名前空間データを含むオブジェクトをインクルードする方法です。 <a class=\"reference internal\" href=\"/ja/5.0/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">path()</span></code></a> または <a class=\"reference internal\" href=\"/ja/5.0/ref/urls/#django.urls.re_path\" title=\"django.urls.re_path\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">re_path()</span></code></a> インスタンスのリストを <code class=\"docutils literal notranslate\"><span class=\"pre\">include()</span></code> する場合、このオブジェクトに含まれる URL はグローバルの名前空間に含まれるようになります。ただし、以下を含む 2値タプルを <code class=\"docutils literal notranslate\"><span class=\"pre\">include()</span></code> することもできます:</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</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=\"Text code\"><code>(&lt;list of path()/re_path() instances&gt;, &lt;application namespace&gt;)\n</code></pre></div>\n<p>例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">include</span><span class=\"p\">,</span> <span class=\"n\">path</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n\n<span class=\"n\">polls_patterns</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n    <span class=\"p\">[</span>\n        <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">IndexView</span><span class=\"o\">.</span><span class=\"n\">as_view</span><span class=\"p\">(),</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;index&quot;</span><span class=\"p\">),</span>\n        <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;&lt;int:pk&gt;/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">DetailView</span><span class=\"o\">.</span><span class=\"n\">as_view</span><span class=\"p\">(),</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;detail&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">],</span>\n    <span class=\"s2\">&quot;polls&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;polls/&quot;</span><span class=\"p\">,</span> <span class=\"n\">include</span><span class=\"p\">(</span><span class=\"n\">polls_patterns</span><span class=\"p\">)),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>これは、与えられたアプリケーション名前空間に、指定された URL パターンをインクルードします。</p>\n<p>インスタンスの名前空間は、 <a class=\"reference internal\" href=\"/ja/5.0/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a> に <code class=\"docutils literal notranslate\"><span class=\"pre\">namespace</span></code> 引数を使うことで指定できます。インスタンス名前空間が指定されていない場合、インクルードされた URLconf のアプリケーション名前空間がデフォルトとなります。つまり、その名前空間のデフォルトインスタンスになります。</p>\n</section>\n</section>","rootId":"url-dispatcher","toc":[{"title":"概要","anchor":"overview","children":[]},{"title":"Django のリクエスト処理","anchor":"how-django-processes-a-request","children":[]},{"title":"カスタマイズ例","anchor":"example","children":[]},{"title":"パス コンバータ","anchor":"path-converters","children":[]},{"title":"独自のパスコンバータを登録する","anchor":"registering-custom-path-converters","children":[]},{"title":"正規表現を使う","anchor":"using-regular-expressions","children":[{"title":"名前なし正規表現グループの使用","anchor":"using-unnamed-regular-expression-groups","children":[]},{"title":"ネストされた引数","anchor":"nested-arguments","children":[]}]},{"title":"URLconf の検索対象","anchor":"what-the-urlconf-searches-against","children":[]},{"title":"ビュー引数のデフォルト値を指定する","anchor":"specifying-defaults-for-view-arguments","children":[]},{"title":"パフォーマンス","anchor":"performance","children":[]},{"title":"urlpatterns 変数の構文","anchor":"syntax-of-the-urlpatterns-variable","children":[]},{"title":"エラーハンドリング","anchor":"error-handling","children":[]},{"title":"他の URLconfs をインクルードする","anchor":"including-other-urlconfs","children":[{"title":"取り込まれたパラメータ","anchor":"captured-parameters","children":[]}]},{"title":"追加的なオプションをビュー関数に渡す","anchor":"passing-extra-options-to-view-functions","children":[{"title":"include() に追加のオプションを引き渡す","anchor":"passing-extra-options-to-include","children":[]}]},{"title":"URL の逆引き","anchor":"reverse-resolution-of-urls","children":[{"title":"例","anchor":"examples","children":[]}]},{"title":"URL パターンに名前をつける","anchor":"naming-url-patterns","children":[]},{"title":"URL の名前空間","anchor":"url-namespaces","children":[{"title":"はじめに","anchor":"introduction","children":[]},{"title":"名前空間の URL を逆引きする","anchor":"reversing-namespaced-urls","children":[{"title":"カスタマイズ例","anchor":"id5","children":[]}]},{"title":"URLの名前空間とインクルードされた URLconfs","anchor":"url-namespaces-and-included-urlconfs","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Django を使う","url":"/ja/5.0/topics/"},{"docname":"topics/http/index","title":"HTTP リクエストのハンドリング","url":"/ja/5.0/topics/http/"}],"prev":{"docname":"topics/http/index","title":"HTTP リクエストのハンドリング","url":"/ja/5.0/topics/http/"},"next":{"docname":"topics/http/views","title":"ビューを記述する","url":"/ja/5.0/topics/http/views/"},"formats":{"html":"/ja/5.0/topics/http/urls/","markdown":"/ja/5.0/topics/http/urls.md","json":"/ja/5.0/topics/http/urls.json"},"source":"https://github.com/django/django/blob/stable/5.0.x/docs/topics/http/urls.txt","official":"https://docs.djangoproject.com/ja/5.0/topics/http/urls/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}