現状
ユーザーがフォームを送信した際にバリデーションに応じてメッセージを表示させたいです。
エラー表示はテンプレートに表示できるが成功時の表示ができない状態です。
フォームのバリデーションが成功した場合は
messgesがテンプレートに渡ってないことは確認しています。
環境
django=3
python=3.6
コード
models.py
class Contact(models.Model): name = models.CharField(max_length=100) email = models.EmailField() phone = models.CharField(max_length=15, blank=True) content = models.TextField()
urls.py
from django.contrib import admin from django.urls import path from promotion_page.views import ContactCreateView urlpatterns = [ path('相談窓口', ContactCreateView.as_view(), name='contact_form'), ]
views.py
from django.urls import reverse_lazy from django.views.generic import CreateView from .forms import ContactForm from .models import Contact from django.contrib import messages class ContactCreateView(CreateView): model = Contact form_class = ContactForm success_url = reverse_lazy("contact_form") def form_valid(self, form): messages.success(self.request,'フォームを送信しました。') return super().form_valid(form) def form_invalid(self, form): messages.error(self.request, "入力内容に誤りがあります。") return super().form_invalid(form)
contact_form.html
{% extends "base.html" %} {% block body %} <div class="container"> <div class="row"> <div class="col-md-6 offset-md-3"> <h2 class="contact"><strong>相談フォーム</strong></h2> {% if messages %} messagesが渡ったぞ <div class="messages_ul" style="list-style: none;"> {% for message in messages %} <p class="alert{% if message.tags %} alert-{{ message.tags }}{% endif %} alert-dismissible" role="alert"> <button type="button" class="close" data-dismiss="alert" aria-label="Close"> <span aria-hidden="true">×</span> </button>{{ message }} </p> {% endfor %} </div> {% endif %} <form method="POST"> {% csrf_token %} {% for f in form %} {{ f }} {{ f.error }} {% endfor %} <button type="submit" class="btn btn-primary contact">送信</button> </form> </div> </div> </div> {% endblock %}
ご教授のほどよろしくお願いいたします。
あなたの回答
tips
プレビュー