以前の記事で作ったテンプレートファイルについて編集を続けていく。

【Django】テンプレートを使ったビューの構築

確認のためテンプレートファイルに書かれたコードを見ていこう。

{% if latest_question_list %}
	<ul>
	{% for question in latest_question_list %}
		<li><a href="/polls/{{ question.id }}">{{ question.question_text }}</a></li>
	{% endfor %}
	</ul>
{% else %}
	<p>No polls are available.</p>
{% endif %}

liタグで囲まれているリンク指定箇所についてハードコーディングされている。

これでは今後URLに変更が生じた場合など、テンプレートの変更箇所が増え、コードの管理が煩雑になってしまうため、管理しやすいよう書き直していく。

urlテンプレートタグを使う

前述のコードは以下のように書き直すことができる。

<li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>

urlタグの引数としてdetailを指定しているが、これはpolls/urls.py内で定義されているname属性を指す。

path('<int:question_id>/', views.detail, name='detail'),

こうしておくことで将来detailのURLに変更があった場合、urls.pyを書き換えるだけで変更をアプリ全体に適用することができる。

例として、質問詳細ページのURLをpolls/detail/1としたい場合、urls.pyを以下のように変更すれば良い。

path('detail/<int:question_id>/', views.detail, name='detail'),