ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
最小構成
# myproject/urls.py
from django.contrib import admin
from django.urls import path
from myapp import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.index, name='home'), # /
path('about/', views.about, name='about'), # /about/
path('books/', views.book_list, name='book_list'), # /books/
path('books/<int:id>/', views.book_detail, name='book_detail'), # /books/123/
]# myapp/views.py
from django.shortcuts import render, get_object_or_404
from .models import Book
def index(request):
return render(request, 'index.html')
def book_list(request):
return render(request, 'book_list.html', {'books': Book.objects.all()})
def book_detail(request, id):
book = get_object_or_404(Book, pk=id)
return render(request, 'book_detail.html', {'book': book})
パスコンバータ
| コンバータ | マッチ | view に渡る型 | 例 |
|---|---|---|---|
str(default) | / 以外の文字列 | str | <str:name> |
int | 0 以上の整数 | int | <int:id> |
slug | 英数字・ハイフン・アンダースコア | str | <slug:slug> |
uuid | UUID 形式 | UUID | <uuid:id> |
path | / を含む文字列全部 | str | <path:filepath> |
path() と re_path() の使い分け
from django.urls import path, re_path
from . import views
urlpatterns = [
# path: シンプル・読みやすい(推奨)
path('articles/<int:year>/<int:month>/', views.month_archive),
# re_path: 正規表現が必要な場合のみ
re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
# 例: 4桁固定の年・2桁固定の月
re_path(r'^reports/(?P<year>\d{4})/(?P<month>\d{2})/$', views.report),
]
path が使えるなら常に path を選ぶ。re_path は正規表現の細かい制限が必要なときだけ。
include() でアプリ毎に分割
プロジェクトが大きくなったら、アプリ単位で urls.py を分けます:
# myproject/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('home.urls')),
path('books/', include('books.urls')),
path('users/', include('users.urls')),
path('api/v1/', include('api.urls')),
]# books/urls.py
from django.urls import path
from . import views
app_name = 'books' # 名前空間
urlpatterns = [
path('', views.book_list, name='list'),
path('<int:id>/', views.book_detail, name='detail'),
path('<int:id>/edit/', views.book_edit, name='edit'),
path('new/', views.book_new, name='new'),
]
name による URL 逆引き
URL を文字列でハードコードせず、name で参照することでURL 変更時の影響を最小化できます:
# views.py
from django.shortcuts import redirect
from django.urls import reverse
def book_create(request):
if request.method == 'POST':
book = Book.objects.create(...)
# ハードコード: ✗
# return redirect('/books/' + str(book.id) + '/')
# 名前空間 + name: ○
return redirect('books:detail', id=book.id)
# reverse でも書ける
return redirect(reverse('books:detail', kwargs={'id': book.id})){# テンプレートから #}
<a href="{% url 'books:detail' id=book.id %}">{{ book.title }}</a>
<a href="{% url 'books:edit' id=book.id %}">編集</a>
<a href="{% url 'books:new' %}">新規作成</a>
<a href="{% url 'home' %}">ホーム</a>
名前空間(namespace)
app_name による名前空間で、複数アプリの URL 名衝突を防げます:
# books/urls.py
app_name = 'books'
urlpatterns = [path('', views.list, name='list')]
# users/urls.py
app_name = 'users'
urlpatterns = [path('', views.list, name='list')]
両方とも name='list' ですが、テンプレートでは {% url 'books:list' %} / {% url 'users:list' %} と区別できます。
クエリパラメータと URL 引数
# /search/?q=python&page=2 の場合
# URL ルーティング: クエリ部分は urls.py に書かない
urlpatterns = [
path('search/', views.search, name='search'),
]
# view 側で request.GET から取得
def search(request):
query = request.GET.get('q', '')
page = int(request.GET.get('page', 1))
...
クラスベースビューと URLconf
# views.py
from django.views.generic import ListView, DetailView
from .models import Book
class BookListView(ListView):
model = Book
template_name = 'books/list.html'
class BookDetailView(DetailView):
model = Book
template_name = 'books/detail.html'
pk_url_kwarg = 'id'
# books/urls.py
from .views import BookListView, BookDetailView
urlpatterns = [
path('', BookListView.as_view(), name='list'),
path('<int:id>/', BookDetailView.as_view(), name='detail'),
]
カスタムコンバータ
独自のパス変換ロジックを書きたい場合:
# converters.py
class YearMonthConverter:
regex = r'\d{4}-\d{2}'
def to_python(self, value):
year, month = value.split('-')
return {'year': int(year), 'month': int(month)}
def to_url(self, value):
return f"{value['year']}-{value['month']:02d}"
# urls.py
from django.urls import path, register_converter
from . import converters, views
register_converter(converters.YearMonthConverter, 'ym')
urlpatterns = [
path('archive/<ym:date>/', views.archive),
# /archive/2026-05/ にマッチ
]
URL 解決順
Django は urlpatterns の上から順にマッチを試みて、最初にマッチしたものを使います:
# 順番が大事!
urlpatterns = [
path('books/new/', views.book_new), # ← /books/new/ はこっち
path('books/<int:id>/', views.book_detail), # 後ろなので /books/new/ には食われない
]
# 逆だと: /books/new/ → <int:id> はマッチしないので OK だが、
# /books/123/ より具体的なパスは先に書く習慣を
FAQ
Q: 末尾スラッシュは付ける?付けない?
A: Django のデフォルトは付ける。APPEND_SLASH = True でスラッシュ無しアクセス時に自動でリダイレクト。
Q: 404 / 500 のカスタムページ
A: ルート urls.py に handler404 = 'myapp.views.custom_404' を定義。テンプレートは templates/404.html。
Q: URL リストを動的に作りたい
A: 通常は不要。複数同じパターンを生成するなら for ループで urlpatterns.extend([...])。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?