How to display multiple django messages in one page?

django, forms, message, python

Solution

You can use `extra_tags` for message from messages framework to identify two different messages.

For example, for login errors

messages.error(request, 'username or password wrong.', extra_tags='login')

for sign up errors,

messages.error(request, 'username or password wrong.', extra_tags='signup')

And then in template depending upon tag you put message in appropriate form

{# login form #}
{%for message in messages %}
     {%if "login" in message.tags %}
          <p> {{message}} </p>   {# show login error message #}
     {%endif%}
{%endfor%}

{# signup form #}
{%for message in messages %}
     {%if "signup" in message.tags %}
          <p> {{message}} </p>   {# show signup error message #}
     {%endif%}
{%endfor%}

More reference at Adding extra message tags

Problem

In my home page I have a login form and sign up form, and i use the form.is_valid() to validate the form, but instead of ``` return render(request,'registration/login.html', {'form': form}) ``` I use ``` messages.error(request, 'username or password wrong.') return redirect('/') ``` am doing this because in ``` return render(request,'registration/login.html', {'form': form}) ``` after the form.is_valid() fail, refresh the page will cause a pop out box says resubmit confirm,I dont want this,so am using the second method. the problem is that there is two form: login and signup , I can't put the error message in one place,that will be misleading ,so how to display two message in one page?

Original source