{"title":"はじめての Django アプリ作成、その 1","version":"5.0","locale":"ja","docname":"intro/tutorial01","url":"/ja/5.0/intro/tutorial01/","canonical":"https://djangodocs.dev/ja/5.0/intro/tutorial01/","summary":"さあ、例を交えながら学んでゆきましょう。 このチュートリアルでは、簡単な投票 (poll) アプリケーションの作成に取り組ん でもらいます。 Poll アプリケーションは 2 つの部分からなります: ユーザが投票したり結果を表示したりできる公開用サイト 投票項目の追加、変更、削除を行うための管理 (admin) サイト…","html":"<h1>はじめての Django アプリ作成、その 1<a class=\"heading-anchor\" href=\"#writing-your-first-django-app-part-1\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>さあ、例を交えながら学んでゆきましょう。</p>\n<p>このチュートリアルでは、簡単な投票 (poll) アプリケーションの作成に取り組ん でもらいます。</p>\n<p>Poll アプリケーションは 2 つの部分からなります:</p>\n<ul class=\"simple\">\n<li><p>ユーザが投票したり結果を表示したりできる公開用サイト</p></li>\n<li><p>投票項目の追加、変更、削除を行うための管理 (admin) サイト</p></li>\n</ul>\n<p><a class=\"reference internal\" href=\"/ja/5.0/intro/install/\"><span class=\"doc\">Django は既にインストール済み</span></a> として説明を進めます。Django がインストールされているかどうか、またどのバージョンがインストールされているかを調べるには、以下のコマンドをシェルプロンプト（先頭の $ は入力待ちを示す記号です）で実行します。</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-0-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python<span class=\"w\"> </span>-m<span class=\"w\"> </span>django<span class=\"w\"> </span>--version\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-0-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py -m django --version\n</code></pre></div></div></div>\n<p>Django がインストールされていれば、インストールされている Django のバージョンがわかります。もしなければ &quot;No module named django&quot; とエラーが表示されます。</p>\n<p>このチュートリアルは Python 3.10 以降をサポートする Django 5.0 用に書かれています。もし Django のバージョンが一致しない場合は、このページの右下にあるバージョンスイッチャーを使って、あなたの Django のバージョンのチュートリアルを参照するか、Django を最新バージョンにアップデートしてください。古いバージョンの Python を使っている場合は、 <a class=\"reference internal\" href=\"/ja/5.0/faq/install/#faq-python-version-support\"><span class=\"std std-ref\">どのバージョンの Python で Django が使えますか?</span></a> をチェックして、互換性のあるバージョンの Django を見つけてください。</p>\n<p>Django の旧バージョンを削除して新しいものをインストールする場合は、 <a class=\"reference internal\" href=\"/ja/5.0/topics/install/\"><span class=\"doc\">Django のインストール方法</span></a> が参考になるでしょう。</p>\n<aside class=\"admonition-where-to-get-help admonition\">\n<p class=\"admonition-title\">困ったときは:</p>\n<p>このチュートリアルの実行に問題がある場合は、FAQ の <a class=\"reference internal\" href=\"/ja/5.0/faq/help/\"><span class=\"doc\">Getting Help</span></a> セクションに進んでください。</p>\n</aside>\n<section id=\"creating-a-project\">\n<h2>プロジェクトを作成する<a class=\"heading-anchor\" href=\"#creating-a-project\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>初めて Django を使うのなら、最初のセットアップを行う必要があります。通常は、 Django のプロジェクト (<a class=\"reference internal\" href=\"/ja/5.0/glossary/#term-project\"><span class=\"xref std std-term\">project</span></a>) を構成するコードを自動生成します。プロジェクトとは、データベースの設定や Django 固有のオプション、アプリケーション固有の設定などといった、個々の Django インスタンスの設定を集めたものです。</p>\n<p>コマンドラインから、コードを置きたい場所に <code class=\"docutils literal notranslate\"><span class=\"pre\">cd</span></code> して、以下のコマンドを実行してください。</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-1-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>django-admin<span class=\"w\"> </span>startproject<span class=\"w\"> </span>mysite\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-1-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> django-admin startproject mysite\n</code></pre></div></div></div>\n<p>これを実行すると、現在のディレクトリに <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite</span></code> ディレクトリが作成されます。動作しなければ <a class=\"reference internal\" href=\"/ja/5.0/faq/troubleshooting/#troubleshooting-django-admin\"><span class=\"std std-ref\">django-admin 実行時の問題</span></a> を参照してください。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>プロジェクトの名前を付けるとき、組み込みの Python モジュールや Django のコンポーネントの名前を使わないようにしてください。とりわけ、 <code class=\"docutils literal notranslate\"><span class=\"pre\">django</span></code> (Django 自体と名前が衝突します) や <code class=\"docutils literal notranslate\"><span class=\"pre\">test</span></code> (組み込みの Python パッケージ名と名前が衝突します) を使わないようにしましょう。</p>\n</aside>\n<p><a class=\"reference internal\" href=\"/ja/5.0/ref/django-admin/#django-admin-startproject\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">startproject</span></code></a> が何を作成したかをみてみましょう:</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>mysite/\n    manage.py\n    mysite/\n        __init__.py\n        settings.py\n        urls.py\n        asgi.py\n        wsgi.py\n</code></pre></div>\n<p>ファイルはそれぞれ以下のような役割を持っています:</p>\n<ul class=\"simple\">\n<li><p>外側の <code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/</span></code> ルートディレクトリは、プロジェクトのコンテナです。その名前は Django にとって重要ではありません。任意の名前に変更できます。</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">manage.py</span></code>: Django プロジェクトに対する様々な操作を行うためのコマンドラインユーティリティです｡詳しくは <a class=\"reference internal\" href=\"/ja/5.0/ref/django-admin/\"><span class=\"doc\">django-admin と manage.py</span></a> 内の <code class=\"file docutils literal notranslate\"><span class=\"pre\">manage.py</span></code> を参照してください｡</p></li>\n<li><p>内側の <code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/</span></code> ディレクトリは、このプロジェクトの実際の Python パッケージです。この名前が Python パッケージの名前であり、 import の際に 使用する名前です (例えば import <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite.urls</span></code>) 。</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/__init__.py</span></code>: このディレクトリが Python パッケージであることを Python に知らせるための空のファイルです。Python の初心者は、 Python の公式ドキュメントの <a class=\"reference external\" href=\"https://docs.python.org/3/tutorial/modules.html#tut-packages\" title=\"(in Python v3.14)\"><span class=\"xref std std-ref\">more about packages</span></a> を読んで下さい。</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/settings.py</span></code>: Django プロジェクトの設定ファイルです。 設定の仕組みは <a class=\"reference internal\" href=\"/ja/5.0/topics/settings/\"><span class=\"doc\">Djangoの設定</span></a> を参照してください。</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/urls.py</span></code>: Django プロジェクトの URL 宣言、いうなれば Django サイトにおける「目次」に相当します。詳しくは <a class=\"reference internal\" href=\"/ja/5.0/topics/http/urls/\"><span class=\"doc\">URL ディスパッチャ</span></a> を参照 してください。</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/asgi.py</span></code>: プロジェクトをサーブするためのASGI互換Webサーバーとのエントリーポイントです。詳細については <a class=\"reference internal\" href=\"/ja/5.0/howto/deployment/asgi/\"><span class=\"doc\">ASGI とともにデプロイするには</span></a> を参照してください。</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/wsgi.py</span></code>: プロジェクトをサーブするためのWSGI互換Webサーバーとのエントリーポイントです。詳細は <a class=\"reference internal\" href=\"/ja/5.0/howto/deployment/wsgi/\"><span class=\"doc\">WSGI とともにデプロイするには</span></a> を参照してください。</p></li>\n</ul>\n</section>\n<section id=\"the-development-server\">\n<h2>開発用サーバー<a class=\"heading-anchor\" href=\"#the-development-server\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django のプロジェクトがうまく動作するか確認しましょう。外側の <code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite</span></code> ディレクトリに移動ができたら下記のコマンドを実行してください:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-2-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>runserver\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-2-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py runserver\n</code></pre></div></div></div>\n<p>コマンドライン上で下記の出力が確認できるでしょう:</p>\n<pre class=\"literal-block\">Performing system checks...\n\nSystem check identified no issues (0 silenced).\n\nYou have unapplied migrations; your app may not work properly until they are applied.\nRun 'python manage.py migrate' to apply them.\n\n2026年08月09日 - 15:50:53\nDjango version 5.0, using settings 'mysite.settings'\nStarting development server at <a class=\"reference external\" href=\"http://127.0.0.1:8000/\">http://127.0.0.1:8000/</a>\nQuit the server with CONTROL-C.</pre>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>適用されていないデータベースマイグレーションについての警告はここでは無視します、後ほどすぐにデータベースとともにたっぷりと取り組みます。</p>\n</aside>\n<p>さあ、これでサーバが起動したので、ブラウザで <a class=\"reference external\" href=\"http://127.0.0.1:8000/\">http://127.0.0.1:8000/</a> にアクセスしてみてください。 &quot;Congratulations!&quot; と表示された、ロケットが離陸しているページが出るはずです。やりましたね！</p>\n<p>これで、 Django 開発サーバを起動しました。 Django 開発サーバは Python だけで書かれた軽量な Web サーバです。このサーバは、開発を迅速に行い、運用に適した状態になるまで Apache のような運用サーバの設定をいじらなくても良いようにするためのものです。</p>\n<p>ここでちょっと注意しておきましょう。このサーバは開発中の利用だけを考えて作られています。絶対に運用環境では <strong>使わないでください</strong> (筆者たちの専門は Web フレームワークであって、Web サーバではありません)。</p>\n<p>(To serve the site on a different port, see the <a class=\"reference internal\" href=\"/ja/5.0/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">runserver</span></code></a> reference.)</p>\n<aside class=\"admonition-automatic-reloading-of-djadmin-runserver admonition\">\n<p class=\"admonition-title\"><a class=\"reference internal\" href=\"/ja/5.0/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">runserver</span></code></a> の自動リロード</p>\n<p>開発サーバーは必要に応じてリクエストごとにPythonコードを自動的にリロードします。コード変更の効果を得るためにサーバーを再起動する必要はありません。しかしながら、ファイルの追加のようないくつかの行動は再起動をトリガーしません、このような場合はサーバーを再起動する必要があります。</p>\n</aside>\n</section>\n<section id=\"creating-the-polls-app\">\n<h2>Polls アプリケーションをつくる<a class=\"heading-anchor\" href=\"#creating-the-polls-app\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>さあ、これで自分用の環境、すなわちプロジェクトが立ち上がり、作業にとりかかる準備ができました。</p>\n<p>Django 内に追加する各アプリケーションは、所定の規約に従った Python パッケージで構成されます。 Django には基本的なディレクトリ構造を自動生成するユーティリティが含まれているので、ディレクトリを作ることではなくコードを書くことに集中できます。</p>\n<aside class=\"admonition-projects-vs-apps admonition\">\n<p class=\"admonition-title\">プロジェクトとアプリケーション</p>\n<p>プロジェクトとアプリの違いは何でしょうか？ アプリとは、ブログシステム、公的記録のデータベース、小規模な投票アプリなど、何かを行う Web アプリケーションです。プロジェクトは、特定のウェブサイトの構成とアプリのコレクションです。プロジェクトには複数のアプリを含めることができます。 アプリは複数のプロジェクトに存在できます。</p>\n</aside>\n<p>アプリケーションは <a class=\"reference external\" href=\"https://docs.python.org/3/tutorial/modules.html#tut-searchpath\" title=\"(in Python v3.14)\"><span class=\"xref std std-ref\">Python path</span></a> のどこにでも置けます。このチュートリアルでは投票アプリケーションを <code class=\"file docutils literal notranslate\"><span class=\"pre\">manage.py</span></code> と同じディレクトリに作ります。なので、 <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite</span></code> のサブモジュールとしてでなく、トップレベルのモジュールとしてインポートできます。</p>\n<p>アプリケーションを作るには、 <code class=\"file docutils literal notranslate\"><span class=\"pre\">manage.py</span></code> と同じディレクトリに入って、このコマンドを実行します:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-3-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>startapp<span class=\"w\"> </span>polls\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-3-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py startapp polls\n</code></pre></div></div></div>\n<p>このコマンドは <code class=\"file docutils literal notranslate\"><span class=\"pre\">polls</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>polls/\n    __init__.py\n    admin.py\n    apps.py\n    migrations/\n        __init__.py\n    models.py\n    tests.py\n    views.py\n</code></pre></div>\n<p>このディレクトリ構造が、 poll アプリケーションの全体像です。</p>\n</section>\n<section id=\"write-your-first-view\">\n<h2>はじめてのビュー作成<a class=\"heading-anchor\" href=\"#write-your-first-view\"><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\">polls/views.py</span></code> を開いて、以下の Python コードを書いてください:</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/views.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.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponse</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">index</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"s2\">&quot;Hello, world. You&#39;re at the polls index.&quot;</span><span class=\"p\">)</span>\n</code></pre></figure>\n<p>This is the most basic view possible in Django. To access it in a browser, we\nneed to map it to a URL - and for this we need to define a URL configuration,\nor &quot;URLconf&quot; for short. These URL configurations are defined inside each\nDjango app, and they are Python files named <code class=\"docutils literal notranslate\"><span class=\"pre\">urls.py</span></code>.</p>\n<p>To define a URLconf for the <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code> app, create a file <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/urls.py</span></code>\nwith the following content:</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\">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\">index</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=\"p\">]</span>\n</code></pre></figure>\n<p>Your app directory should now look like:</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>polls/\n    __init__.py\n    admin.py\n    apps.py\n    migrations/\n        __init__.py\n    models.py\n    tests.py\n    urls.py\n    views.py\n</code></pre></div>\n<p>The next step is to configure the global URLconf in the <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite</span></code> project to\ninclude the URLconf defined in <code class=\"docutils literal notranslate\"><span class=\"pre\">polls.urls</span></code>. To do this, add an import for\n<code class=\"docutils literal notranslate\"><span class=\"pre\">django.urls.include</span></code> in <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite/urls.py</span></code> and insert an\n<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> in the <code class=\"docutils literal notranslate\"><span class=\"pre\">urlpatterns</span></code> list, so you have:</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\">mysite/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.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</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;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=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;admin/&quot;</span><span class=\"p\">,</span> <span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">urls</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\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 を参照できます。 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.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a> の背景にある考えは、 URL を簡単にプラグ &amp; プレイ可能にすることです。 polls には独自の URLconf (<code class=\"docutils literal notranslate\"><span class=\"pre\">polls/urls.py</span></code>) を持っているので、 &quot;/polls/&quot; 、 &quot;/fun_polls/&quot; や、 &quot;/content/polls/&quot; といった、どんなパスルート下にも置けて、どこに置いてもきちんと動作します。</p>\n<aside class=\"admonition-when-to-use-func-django-urls-include admonition\">\n<p class=\"admonition-title\"><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<p>URLパターンをインクルードするときは常に <code class=\"docutils literal notranslate\"><span class=\"pre\">include()</span></code> を使うべきです。 <code class=\"docutils literal notranslate\"><span class=\"pre\">admin.site.urls</span></code> はこれについての唯一の例外です。</p>\n</aside>\n<p>これで <code class=\"docutils literal notranslate\"><span class=\"pre\">index</span></code> ビューを URLconf に紐付けることができました。下記のコマンドを実行して、動作を確認してください:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-4-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>runserver\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-4-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py runserver\n</code></pre></div></div></div>\n<p>ブラウザで <a class=\"reference external\" href=\"http://localhost:8000/polls/\">http://localhost:8000/polls/</a> にアクセスすると、 &quot;<em>Hello, world. You're at the polls index.</em>&quot; と表示されるのが確認できるでしょう。これはビューの <code class=\"docutils literal notranslate\"><span class=\"pre\">index</span></code> で定義したものです。</p>\n<aside class=\"admonition-page-not-found admonition\">\n<p class=\"admonition-title\">ページが見つかりませんか？</p>\n<p>ここでエラーページが表示されたら、 <a class=\"reference external\" href=\"http://localhost:8000/\">http://localhost:8000/</a> ではなく、 <a class=\"reference external\" href=\"http://localhost:8000/polls/\">http://localhost:8000/polls/</a> にアクセスしていることを確認してください。</p>\n</aside>\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> 関数は4つの引数を受け取ります。引数のうち <code class=\"docutils literal notranslate\"><span class=\"pre\">route</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">view</span></code> の2つは必須で、<code class=\"docutils literal notranslate\"><span class=\"pre\">kwargs</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> の2つは省略可能です。ここで、これらの引数がどのようなものか見てみましょう。</p>\n<section id=\"path-argument-route\">\n<h3><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> 引数: <code class=\"docutils literal notranslate\"><span class=\"pre\">route</span></code><a class=\"heading-anchor\" href=\"#path-argument-route\"><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\">route</span></code> は URL パターンを含む文字列です。リクエストを処理するとき、Django は <code class=\"docutils literal notranslate\"><span class=\"pre\">urlpatterns</span></code> のはじめのパターンから開始し、リストを順に下に見ていきます。要求された URL を一致するものを見つけるまで各パターンと比較します。</p>\n<p>パターンはGETやPOSTのパラメーター、そしてドメイン名を検索しません。例えば、 <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> を探します。 <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</section>\n<section id=\"path-argument-view\">\n<h3><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> 引数: <code class=\"docutils literal notranslate\"><span class=\"pre\">view</span></code><a class=\"heading-anchor\" href=\"#path-argument-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django がマッチする正規表現を見つけると、 Django は指定されたビュー関数を呼び出します。その際は <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> オブジェクトを第一引数に、そしてキーワード引数としてrouteから「キャプチャされた」値を呼び出します。この例はこの後すぐ出てきます。</p>\n</section>\n<section id=\"path-argument-kwargs\">\n<h3><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> 引数: <code class=\"docutils literal notranslate\"><span class=\"pre\">kwargs</span></code><a class=\"heading-anchor\" href=\"#path-argument-kwargs\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>任意のキーワード引数を辞書として対象のビューに渡せます。この機能はチュートリアルでは使いません。</p>\n</section>\n<section id=\"path-argument-name\">\n<h3><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> 引数: <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code><a class=\"heading-anchor\" href=\"#path-argument-name\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>URL に名前付けをしておけば Django のどこからでも明確に参照でき、とくにテンプレートの中で有効です。この便利な機能のおかげで、プロジェクトのURLにグローバルな変更を加える場合にも1つのファイルを変更するだけで済むようになります。</p>\n<p>基本的なリクエストとレスポンスのフローに馴染んだら、データベースを使った作業を始めるために <a class=\"reference internal\" href=\"/ja/5.0/intro/tutorial02/\"><span class=\"doc\">チュートリアルその2</span></a> を読みましょう。</p>\n</section>\n</section>","rootId":"writing-your-first-django-app-part-1","toc":[{"title":"プロジェクトを作成する","anchor":"creating-a-project","children":[]},{"title":"開発用サーバー","anchor":"the-development-server","children":[]},{"title":"Polls アプリケーションをつくる","anchor":"creating-the-polls-app","children":[]},{"title":"はじめてのビュー作成","anchor":"write-your-first-view","children":[{"title":"path() 引数: route","anchor":"path-argument-route","children":[]},{"title":"path() 引数: view","anchor":"path-argument-view","children":[]},{"title":"path() 引数: kwargs","anchor":"path-argument-kwargs","children":[]},{"title":"path() 引数: name","anchor":"path-argument-name","children":[]}]}],"breadcrumbs":[{"docname":"intro/index","title":"さぁ始めましょう","url":"/ja/5.0/intro/"}],"prev":{"docname":"intro/install","title":"クイックインストールガイド","url":"/ja/5.0/intro/install/"},"next":{"docname":"intro/tutorial02","title":"はじめての Django アプリ作成、その 2","url":"/ja/5.0/intro/tutorial02/"},"formats":{"html":"/ja/5.0/intro/tutorial01/","markdown":"/ja/5.0/intro/tutorial01.md","json":"/ja/5.0/intro/tutorial01.json"},"source":"https://github.com/django/django/blob/stable/5.0.x/docs/intro/tutorial01.txt","official":"https://docs.djangoproject.com/ja/5.0/intro/tutorial01/","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"]}