LoginSignup
0
4

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-03-09

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

※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 %}
0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4