前回の記事で、urlテンプレートタグを使ったリンクの指定方法を紹介した。
【Django】リンク先の指定にurlテンプレートタグを利用する
しかし、プロジェクト内に複数のアプリが存在し、それぞれのアプリで同じURLがある場合、このままではアプリを識別する手だてがない。
そのため、アプリが複数存在する場合は名前空間を使う必要があるのだ。
名前空間を追加する
名前空間を使う方法は簡単で、まずはアプリ内のurls.pyにapp_nameを定義する。
# app_nameを追加
app_name = 'polls'
urlpatterns = [
path('', views.index, name='index'),
path('<int:question_id>/', views.detail, name='detail'),
path('<int:question_id>/results/', views.results, name='results'),
path('<int:question_id>/vote/', views.vote, name='vote'),
]
これで名前空間を使用する準備は整った。
名前空間を使ってURLを指定する
テンプレートファイルのurlタグを以下のように修正する。
/templates/polls/index.html
<li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>
# 上記のコードを以下に修正
<li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>
先のapp_nameで指定したアプリ名をコロン区切りで追加しただけだ。
これでpollsアプリの詳細ページURLをリンクとするビューが出来上がった。