前回の記事で、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をリンクとするビューが出来上がった。