DjangoアプリのURLリンクの貼り方とメリット
|
Djangoではurlリンクを貼るときに urlのテンプレートタグ というのを使います。
こんなの↓
{%!u(MISSING)rl リンク名 %!}(MISSING)
このurlテンプレートタグの使い方とメリットをメモします。
urlテンプレートタグの使い方
使い方はこう↓
<a href="{%!u(MISSING)rl 'index' %!}(MISSING)">Home</a>
こうすることで、urls.pyに指定した下記のようなパス名のURLが書き出されます。
urlpatterns = [
path('', views.index, name='index'), # nameがindexとなっているパスが呼ばれる
]
HTMLに慣れたあなたは「なんでこんなことするの?絶対パスにすれば楽なのに。。。」と言う。
私もそう思いました。リンクを貼るだけならHTML記法だけで十分だし、そのほうが楽チンですからね。
urlテンプレートタグを使うメリット
PythonやDjangoの機能と絡めて動的に扱えるのが利点です。
例えばurls.pyで次のような news-year-archive という名前のパスがあるとします。
urlpatterns = [
# <int:year>でint型の数値を受け取れる
path('articles/<int:year>/', views.year_archive, name='news-year-archive'),
#...
]
articles/<int:year>
のyearはint型の数字を引数にとってくれます。1999でもいいし、2018でも大丈夫です。同じ形式のリンクを大量に作りたいときなどに便利です。
# テンプレート側に書くリンク。
# urls.py側に"2012"を渡すようにしている。
<a class="navbar-item" href="{%!u(MISSING)rl 'news-year-archive' 2012 %!}(MISSING)">2012 Archive</a>
views.pyでは次のようにyearを引数として受け取れるようにします。さらに引数として受け取った変数をテンプレートへ渡すこともできちゃったり。
def year_archive(request, year):
params = {
'title': '年月アーカイブ',
'subtitle': '',
'year': year,
}
return render(request, 'hello/year_archive.html', params)
まとめ
Djangoのurlテンプレートタグの基本的な使い方をまとめました。他にも色々機能があるようですが、必要になったら調べることにして、取り急ぎここまで。