{% url %}を使って画面遷移を行う方法
この記事では、テンプレート上にリンクを作成して、画面遷移をする方法を紹介する。
{% url %}Djangoのテンプレートで記述する独自の言語テンプレートパターンの1つで、リンクを作成することができる。
以下のように記述する。
{% url 'hello' %}
この例では、helloで指定されたページに遷移するようになる。
実例を以下に記載する
- templates/hello.html
<a href="{% url 'basicapp:other' %}">THE OTHER PAGE</a>
<!-- basicapアプリケーションのotherに遷移 -->
<a href="{% url 'admin:index' %}">ADMIN</a>
<!-- Adminに遷移 -->
<a href="{% url 'index' %}">ADMIN</a>
<!-- プロジェクトフォルダのindexに遷移 -->
上で指定したように遷移をさせるには、urls.pyでURLマッピングをする必要がある。
app_name変数の指定と、urlpatterns変数内でname=''として遷移先を指定することが必要。
以下のように記述する
- プロジェクト名/urls.py
from django.urls import path, include
from basicapp import views
urlpatterns = [
path('admin/', admin.site.urls), # adminの遷移先指定
path('basicapp/', include('basicapp.urls')), # URLにbasic_app/の遷移の詳細をbasicapp.urlsに記述
path('index/', views.index, name='index'), # name='index'とすることでテンプレートで{% index %}としたときに、views(basicapp/views)のindex関数に遷移
]
- basicapp/urls.py
from basicapp import views
# app_nameを指定すると、テンプレートで[% app_name:〇〇 %}とした際にapp_nameがこのファイルを指定していると解釈する
app_name = 'basicapp'
urlpatterns = [
path('relative/', views.relative, name='relative'), # name='relative'とすることで、{% app_name:relative %}と指定したときにviewsのrelative関数を呼び出す
path('other/', views.other, name='other'), # name='other'とすることで、{% app_name:other %}と指定したときにviewsのother関数を呼び出す
]
nameの指定を忘れると、Reverse for '' not found エラーが発生する。