今回は「[Django初心者]DjangoでTodoリストを作成する」の第5回として、Todoの削除機能を追加していこうと思います。
前回は、編集画面の表示をしました。
まだそこまでやれていない人はぜひ前回までをみてください!
[Djnago初心者]DjnagoでTodoリストを作成する① (省略Ver)
[Django初心者]DjangoでTodoリストを作成する②(省略Ver)
[Djnago初心者]DjnagoでTodoリストを作成する③ (省略Ver)
[Django初心者]DjangoでTodoリストを作成する④(省略Ver)
また、この記事は手順の確認のため解説を省いています。
細かい説明しているバージョンもあるので、初学者のかたは下記を見てください。
[Django初心者]DjangoでTodoリストを作成する⑤
GitHubはこちらです。
GitHubの使い方がわからない方はこちらを参考にしてください!
それでは早速やっていきましょう!
構成の確認
まずは前回までの構成の確認からしていきましょう。
├── config
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── db.sqlite3
├── manage.py
├── templates
│ └── base.html
└── todo
├── __init__.py
├── admin.py
├── apps.py
├── migrations
│ ├── 0001_initial.py
│ ├── __init__.py
├── models.py
├── static
│ └── todo
│ └── css
│ └── list.css
├── templates
│ └── todo
│ ├── detail.html
│ ├── list.html
│ └── update.html
├── tests.py
├── urls.py
└── views.py
urls.pyに追記
次にように追記してください。
from django.urls import path
from .views import TodoList, TodoDetail, TodoUpdate, TodoDelete
urlpatterns = [
path('list/', TodoList.as_view(), name='list'),
path('detail/<int:pk>/', TodoDetail.as_view(), name='detail'),
path('update/<int:pk>/', TodoUpdate.as_view(), name='update'),
path('delete/<int:pk>/', TodoDelete.as_view(), name='delete'), # ここ
]
vies.pyに追記
次のように追記してください。
from django.views import generic
from .models import TodoModel
from django.urls import reverse_lazy
class TodoList(generic.ListView):
template_name = 'todo/list.html'
model = TodoModel
class TodoDetail(generic.DetailView):
template_name = 'todo/detail.html'
model = TodoModel
class TodoUpdate(generic.UpdateView):
template_name = 'todo/update.html'
model = TodoModel
fields = ('title', 'content', 'deadline')
# ここから
class TodoDelete(generic.DeleteView):
template_name = 'todo/delete.html'
model = TodoModel
success_url = reverse_lazy('list')
delete.htmlの編集
ターミナルで次のようなコマンドを実行してください。
touch todo/templates/todo/delete.html
再度構成を確認します。
├── config
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── db.sqlite3
├── manage.py
├── templates
│ └── base.html
└── todo
├── __init__.py
├── admin.py
├── apps.py
├── migrations
│ ├── 0001_initial.py
│ ├── __init__.py
├── models.py
├── static
│ └── todo
│ └── css
│ └── list.css
├── templates
│ └── todo
│ ├── delete.html
│ ├── detail.html
│ ├── list.html
│ └── update.html
├── tests.py
├── urls.py
└── views.py
delete.htmlを次のように編集してください。
{% extends 'base.html' %}
{% block content %}
<div class="jumbotron jumbotron-fluid">
<div class="container">
<h1 class="display-4">削除フォーム</h1>
<p class="lead">やることを削除しましょう</p>
</div>
</div>
<div class="container">
<form action="" method="POST">
{% csrf_token %}
<h1>{{ object.title }}</h1>
<p>{{ object.content }}</p>
<p>{{ object.deadline }}</p>
<p>本当に削除しますか?</p>
<input type="submit" value="削除">
</form>
</div>
<div class="container">
<p class="btn-content"><a href="{% url 'list' %}" class="btn btn-info" tabindex="-1" role="button" aria-disabled="true">一覧に戻る</a></p>
</div>
{% endblock content %}
list.htmlに追記
次のように追記してください。
{% extends 'base.html' %}
{% load static %}
{% block header %}
<link rel="stylesheet" href="{% static 'todo/css/list.css' %}">
{% endblock header %}
{% block content %}
<div class="jumbotron jumbotron-fluid">
<div class="container">
<h1 class="display-4">TodoList</h1>
<p class="lead">やることを記入しましょう</p>
</div>
</div>
<div class="container ">
{% for list in object_list %}
<div class="one_box">
<h1>{{ list.title }}</h1>
<h4>{{ list.deadline }}</h4>
<div class="btns">
<p class="btn-content"><a href="{% url 'detail' list.pk %}" class="btn btn-primary "tabindex="-1" role="button" aria-disabled="true">詳細</a></p>
<p class="btn-content"><a href="{% url 'update' list.pk %}" class="btn btn-info" tabindex="-1" role="button" aria-disabled="true">編集</a></p>
<!--ここの間-->
<p class="btn-content"><a href="{% url 'delete' list.pk %}" class="btn btn-danger" tabindex="-1" role="button" aria-disabled="true">削除</a></p>
<!--ここの間-->
</div>
</div>
<hr>
{% endfor %}
</div>
{% endblock content %}
詳細画面の表示
それでは早速削除画面を表示させてみましょう。
こちらにアクセスしてください。
http://127.0.0.1:8000/list/
どのTodoでも良いので「削除」というボタンをクリックしてください。
登録していた情報がしっかり表示されていますね。
それでは「削除」というボタンを押してください。
そうすると一覧表示画面が表示され、先ほど削除したデータが表示から消えていると思います。
これで削除画面の作成とデータ野削除の実行は完了です!
お疲れ様でした!
最後に
今回は「DjnagoでTodoリストを作成する」の第5回として、Todoの削除画面を作成して、todoの削除をするところまでやってきました。
続き...
[Django初心者]DjangoでTodoリストを作成する⑥(省略Ver)
質問などがあればコメントするか、TwitterのDMまで送ってください!
それでは!