以前の記事で作ったテンプレートファイルについて編集を続けていく。
確認のためテンプレートファイルに書かれたコードを見ていこう。
{% 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'),