Help us understand the problem. What is going on with this article?

[Django]フォーム入力画面でメッセージを表示する

表示されるメッセージのイメージ

※bootstrapを使用していることが前提です。

image.png

設定する箇所

  • views.py
  • settings.py
  • html

views.py

  • FormViewクラスを継承し、form_validメソッドをオーバーライド
  • messages.success(self.request, 'メッセージを送信しました。')で成功時のメッセージを設定
class InquiryView(FormView):
    template_name = "inquiry.html"
    form_class = InquiryForm
    # success_urlは指定されたurlにリダイレクト(バリエーションに問題がなければ)
    # reverse_lazyでurlを逆引きできる。ハードコーディングは避ける。reverse関数の遅延評価版。
    success_url = reverse_lazy('app_name:inquiry')  # <urls.pyのapp_name>:<ルーティングにつけたname>

    def form_valid(self, form):
        """
        FormViewのメソッドをOverride
        Validationに問題がなければ実行される
        formオブジェクトにユーザの入力値が格納されている
        """
        messages.success(self.request, 'メッセージを送信しました。')

        return super().form_valid(form)

setting.py

  • {{ message.tags }} にレベルに応じたメッセージが反映される
  • Bootstrapに対応
MESSAGE_TAGS = {
    messages.ERROR: 'alert alert-danger',
    messages.WARNING: 'alert alert-warning',
    messages.SUCCESS: 'alert alert-success',
    messages.INFO: 'alert alert-info'
}

html

    {% if messages %}
    <div class="container">
        <div class="row">
            <div class="my-div-style w-100">
                <ul class="messages" style="list-style: none;">
                    {% for message in messages %}
                    <li {% if message.tags %} class="{{ message.tags }}">
                        {% endif %}
                        {{ message }}
                    </li>
                    {% endfor %}
                </ul>
            </div>
        </div>
    </div>
    {% endif %}
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away