Formの送信を実装したのは良いけど,何も表示されていないからできたかどうかわからないといった悩みはないでしょうか?
一般的なwebサイトではFormの送信やデータベースの作成時に完了しました!とメッセージを表示されます
本記事では,djangoでメッセージ表示を簡単に実装する方法を解説します
Class継承を使って2行ほど追加するだけなので,だれでも簡単に実装できます
本記事で用いるフォームは下記記事のものを使うので,参考にしてください
【django】お問い合わせフォームを実装する方法 (CreateView)
webサービスにおいてお問い合わせフォームは必要不可欠です しかし,お問い合わせフォームはHTMLで表現するだけでなく,モデルの作成や送信フォームの設置と難易度が上…
目次
views.pyでSuccessMessageMixinを継承する
今回はお問い合わせが成功した際にメッセージが出るようにします
views.pyは下記のようになっていると思います
class ContactFormView(CreateView):
template_name = 'blog/contact.html'
form_class = ContactForm
success_url = reverse_lazy('home')
model = Contact
こちらのContactFormView(CreateView)にクラスを継承します
編集する箇所は2つだけです
変更箇所
- Class継承にSuccessMessageMixinを追加
- Class変数にsuccess_messageを追加
from django.contrib.messages.views import SuccessMessageMixin
class ContactFormView(SuccessMessageMixin, CreateView): #継承追加
template_name = 'blog/contact.html'
form_class = ContactForm
success_url = reverse_lazy('home')
model = Contact
success_message = 'お問い合わせありがとうございました。' #メッセージ追加
テンプレートにメッセージを表示する
リダイレクトする先にテンプレートを編集します
つまり送信成功した場合に,どのURLに飛んでメッセージを表示させたいかを選択します
本記事では,home.htmlになります
{% if messages %}
<div class="messages alert alert-primary" role="alert">
{% for message in messages %}
{{ message }}
{% endfor %}
</div>
{% endif %}
上記のifブロックごと好きな場所に追加してください
これでサーバーを立ち上げて確認してください
参考文献
Using mixins with class-based views | Django documentation
The web framework for perfectionists with deadlines.
お疲れ様でした
コメント