ここからは、リンクの使い方について学んでいきましょう。
Todoリストでは、Todo一覧から詳細画面や削除画面、更新画面に遷移することができるように設定をしなければいけません。
djangoでは、そういった時のリンクの設定も簡単にできるような機能が備えられています。
実際にコードを書きながら学んでいきましょう。
コードBASE/templates/list.html
...
{% extends 'base.html' %}
1 {% block content %}
2 {% for list in object_list %}
3 <p>{{list.title}}</p>
4 <ul>
5 <li><a href='{% url 'detail' list.pk %}'>詳細画面へ</a></li> ← new!
6 <li><a href='{% url 'update' list.pk %}'>編集画面へ</a></li> ← new!
7 <li><a href='{% url 'delete' list.pk %}'>削除画面へ</a></li> ← new!
8 </ul>
9 {% endfor %}
10 <p><a href='{% url 'create' %}'>新規作成画面へ</a></li> ← new!
11 {% endblock %}
...
"{% url 'detail' list.pk %}"の意味
ここから、djangoでurlをコントロールしていく方法について説明していきます。
コードを一つずつ見てみましょう。
コードの解説(1) まず、1行目と11行目で{% %}で囲み、blockとendblockと書きました。
これは、base.htmlの内容を生かしつつ、base.htmlのファイルのblockの中今回指定したブロックの中身を入れるようにしています。
(2) 2行目で、for文を使ってTodoのデータを一つずつ取り出しています。そして、取り出したデータはlistという変数の中に順番に入れていくようにしています。
(3) 次にurlです。5行目を見てみましょう。
これは、urlの情報を表示するようにdjangoに指示するために使われます。
urlの次に''で囲まれている部分が、具体的に表示するviewの内容です。この5行目では、'detail'と書かれています。
これは、urls.pyファイルの中で指定したname='detail'の部分です。
改めてurls.pyの該当部分を見ていきましょう。
コードurlpatterns = [
path('detail', TodoDetailView.as_view(), name='detail'),
]
上記のname='detail'という部分に注目してください。このように指定をすることで、'detail'を使うことで対象となるurl(ここではTodoDetailViewで指定しているtemplate_name)を呼び出すことができるようになるのです。
最後にlist.pkですが、これは個別の個別のデータののprimary keyを示しています。
本棚アプリのところで、詳細ページを表示するためにはprimary keyを指定しなければいけなかったという点を覚えているでしょうか。
詳細ページを表示するには、どの番号のTodoかを指定する必要がありますので、ここで指定しているのです。
編集画面と削除画面に関するurlも同じ考え方です。
設定をしたうえで、最後に詳細画面を作ってTodoアプリの完成です。
コードBASE/templates/detail.html
{% extends 'base.html' %}
{% block header %}
<h1>Todo詳細画面</h1>
{% endfor %}
{% block content %}
<p>タイトル:{{ object.title }}</p>
<p>Todoの内容{{ object.content }}</p>
<p>担当者:{{ object.pic }}</p>
{% endblock %}
この内容も本棚アプリで作ったものとほとんど同じです。
これでTodoアプリが完成しました。
サーバーを立ち上げてサイトを見てみましょう。動画で一連の流れを確認してみて下さい。
実際にブラウザ上で動いているのを見ると、アプリを作ったというイメージがわきますよね!
Todoリストの作成、お疲れさまでした。