Djangoのテンプレートにおいてaタグのurlを指定する方法:実は3パターンで網羅できる
はじめに
DjangoのテンプレートHTMLにaタグのhrefでリンク先を指定することはよくあります。
ハードコーディングせず、
<a href="{% url 'blog:detail' blog.id %}">
のように動的に生成する方法をまとめると実は以下の2パターンだけで、簡単だったのでメモしておきます。
1:URLにパラメータがない場合、2:URLにパラメータが1つある場合、3:URLにパラメータが複数ある場合
(1の「URLにパラメータがない場合」とは、例えば、https://example.com/blogのようなもので、2の「URLにパラメータがある場合」とはhttps://example.com/blog/123のようなものです。3はhttps://example.com/blog/123/1221/12のようなものです。)
参考:Django公式のチュートリアル03 URL名の名前空間
バージョン
Django == 3.2
パターン1:URLにパラメータがない場合
URLにパラメータがない場合は以下のようになります
<a href="{% url 'アプリ名:URL名' %}">
例えばブログアプリで、urls.pyが↓の場合
from django.urls import path
from . import views
app_name = 'blog'
urlpatterns = [
path('',views.top_func, name='top'),
]
app_nameのblogと、urlのnameであるtopを使って
<a href="{% url 'blog:top' %}">
のようになります。
パターン2:URLにパラメータが1つある場合
URLにパラメータが1つだけある場合は以下のようになります。
<a href="{% url 'アプリ名:URL名' パラメータ %}">
例えばブログアプリでhttps://example.com/blog/12のようなページのURLを指定するときは、urls.pyが↓の場合
from django.urls import path
from . import views
app_name = 'blog'
urlpatterns = [
path('<int:id>',views.detail_func, name='detail'),
]
app_nameのblogと、urlのnameであるdetail、パスパラメータの12を使って、
<a href="{% url 'blog:detail' 12 %}">
のようになります。
パターン3:URLにパラメータが複数ある場合
URLにパラメータが複数ある場合は以下のようになります。パターン2のパラメータ部分をスペースで区切って並べただけですね。
<a href="{% url 'アプリ名:URL名' パラメータ1 パラメータ2 %}">
例えばブログアプリでhttps://example.com/blog/baby/12で、urls.pyが↓の場合
from django.urls import path
from . import views
app_name = 'blog'
urlpatterns = [
path('<str:username>/<int:id>',views.detail_func, name='detail'),
]
app_nameのblog、urlのnameであるdetail、1つ目のパラメータであるbaby、2つ目のパラメータである12を使って
<a href="{% url 'blog:top' baby 12 %}">
のようになります。
まとめ
Djangoのテンプレートにおいてaタグのurlを指定するには3パターンだけ把握すれば十分とわかりました!
ディスカッション
コメント一覧
まだ、コメントがありません