投稿を完了した後や更新が成功したときに,その結果をフラッシュメッセージとして表示する機能を実現しよう.このためには,views.py で form_valid 関数を準備し,その中で表示したいメッセージを設定する.
comments/views.py (抜粋)
from django.urls import reverse_lazy
# from django.shortcuts import render
# from django.http import HttpResponse
from django.views.generic import ListView
from django.views.generic import DetailView
from django.views.generic import CreateView
from django.views.generic import UpdateView
from django.views.generic import DeleteView
from django.shortcuts import redirect
from django.contrib import messages
from .forms import CommentForm
from .models import Comment
# Create your views here.
...(中略)...
class CreateCommentView(CreateView):
model = Comment
form_class = CommentForm
success_url = reverse_lazy('comments:index')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['page_title'] = 'コメントの投稿'
context['form_name'] = 'コメントの投稿'
context['button_label'] = 'コメントを投稿する'
return context
def form_valid(self, form):
self.object = comment = form.save()
messages.success(self.request, 'コメントを投稿しました')
return redirect(self.get_success_url())
テンプレートファイルである comments/templates/base.html にフラッシュメッセージを表示するための要素を追加する.
comments/templates/base.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{% block title %}{% endblock %}</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous">
</head>
<body>
{% if messages %}
<div class="container">
<div>
{% for message in messages %}
<p>{{ message }}</p>
{% endfor %}
</div>
</div>
{% endif %}
{% block content %}
{% endblock content %}
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-A3rJD856KowSb7dwlZdYEkO39Gagi7vIsF0jrRAoQmDKKtQBHUuLZ9AsSv4jD4Xa" crossorigin="anonymous"></script>
</body>
</html>
新規にコメントを投稿してみる.
投稿が完了すると画面最上部にフラッシュメッセージが表示された.なお,このページでブラウザの再読み込みを行うとメッセージが消えることも確認しておこう.また,フラッシュメッセージのデザインはこれからスタイルシートを使って調整しよう.