【Django】Todoアプリを開発 #5 ~テンプレート設定, タスク作成~
スポンサードリンク
おはようございます。Shotaです。
今回の記事では、DjangoでTodoアプリを開発するための手順として次のようなことをやっていきます。
- テンプレート設定(
base.html
)- タスク編集(
update.html
)
それでは早速、本題に入りましょう。
テンプレート設定
最初に、テンプレートを設定します。Djangoでは同じ形のテンプレートを使い回すためには基盤となるhtmlファイルを用意してそれを使いまわしていきます。
まずは、templates/base.html
ファイルを作成し、以下のように書きましょう。
templates/base.html
!doctype html> <html lang="ja"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Bootstrap CSS --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous"> <title>Sample Page</title> </head> <body> {% block header %} {% endblock header %} {% block content %} {% endblock content %} </body> </html>
あと、templates
フォルダの中に入っているhtmlファイルの先頭に{% extends 'base.html' %}
を書けばテンプレートを使い回す基本的な設定は完了です。
templates/list.html
(せっかくなのでBootstrapを入れておく)
{% extends 'base.html' %} {% block header %} <h1>タスク一覧</h1> {% endblock header %} {% block content %} {% for item in object_list %} <div class="container"> <h4>{{ item.title }}<a href="{% url 'detail' item.pk %}" class="btn btn-secondary">詳細</a></h4> <hr> </div> {% endfor %} {% endblock content %}
templates/detail.html
{% extends 'base.html' %} {% block header %} <h1>詳細ページ</h1> {% endblock header %} {% block content %} <div class="container"> <div class="card"> <div class="card-header"> {{ object.title }} </div> <div class="card-body"> <p class="card-text">{{ object.memo }}</p> </div> </div> <a href="{% url 'list' %}" class="btn btn-outline-primary">戻る</a> </div> {% endblock content %}
あとはtodo/urls.py
で以下のようにコードを書いてください。
from django.urls import path, include from .views import TodoList, TodoDetail urlpatterns = [ path('', TodoList.as_view(), name='list'), path('detail/<int:pk>', TodoDetail.as_view(), name='detail'), ]
変数urlpatterns
の中にある関数path
の引数にname
がありますね。これは、htmlファイルに組み込んで使う時にname
の文字列でhtmlファイルを呼び出すときによく利用されます。
完成してサーバを立ち上げると、以下のようになります。
(画像)
タスク作成
今度は、新しいタスクを作成するためのコードを書いていきます。
まずはtodo/views.py
にアクセスして以下のコードを書いてください。
from django.views.generic import ListView from django.views.generic.detail import DetailView from .models import TodoModel from django.views.generic.edit import CreateView from django.urls import reverse_lazy class TodoList(ListView): template_name = 'list.html' model = TodoModel class TodoDetail(DetailView): template_name = 'detail.html' model = TodoModel class TodoCreate(CreateView): template_name = 'create.html' model = TodoModel fields = ('title', 'memo', ) success_url = reverse_lazy('list')
付け加えたコードは以下の通りです。
from django.views.generic.edit import CreateView from django.urls import reverse_lazy class TodoCreate(CreateView): template_name = 'create.html' model = TodoModel fields = ('title', 'memo', ) success_url = reverse_lazy('list')
変数fields
はフォームを作成する時に必要なものです。そして、success_url
にはデータの入力が正常に終了した時に遷移するURL先を設定します。
次に、todo/urls.py
に以下のような編集を加えていきます。
from django.urls import path, include from .views import TodoCreate, TodoList, TodoDetail urlpatterns = [ path('', TodoList.as_view(), name='list'), path('detail/<int:pk>', TodoDetail.as_view(), name='detail'), path('create/', TodoCreate.as_view(), name='create'), ]
これでタスクを新しく作成するためのURLの遷移先を明確にできました。
あとはtemplates/create.html
を作成して以下のように書くだけです。
{% extends 'create.html' %} {% block header %} <h1>タスク作成</h1> {% endblock header %} {% block content %} <div class="container"> <form method="POST">{% csrf_token %} <input class="form-control" type="text" placeholder="タイトル(全角50文字以内)" aria-label="default input example" name="title"> <div class="form-floating"> <textarea class="form-control" placeholder="タスク詳細" id="floatingTextarea2" name="memo" style="height: 150px"></textarea> <label for="floatingTextarea2">Comments</label> </div> <a href="{% url 'list' %}" class="btn btn-outline-success">戻る</a> <button type="submit" class="btn btn-success">投稿する</button> </form> </div> {% endblock content %}
実際にサーバを立ち上げて確認してみましょう。
画像
タスクを適当に入力して投稿してみましょう。
画像
これで無事に実装でき、簡単なTODOアプリを完成できましたね。
まとめ
今回の記事では、テンプレート設定やタスク作成を中心にDjango製のTodoアプリを開発する方法を詳細に書きました。
今回の記事はこれで終了です。