如何在一个页面中显示多个django消息?

时间:2013-02-22 05:48:10

标签: python django forms message

在我的主页上,我有一个登录表单和注册表单,我使用form.is_valid()来验证表单,

但不是

return render(request,'registration/login.html', {'form': form})

我用

messages.error(request, 'username or password wrong.')
return redirect('/')

我这样做是因为

return render(request,'registration/login.html', {'form': form})

在form.is_valid()失败后,刷新页面会弹出一个框,说重新提交确认,我不想要这个,所以我正在使用第二种方法。

问题是有两种形式:登录和注册,我不能把错误信息放在一个地方,这会产生误导,那么如何在一个页面中显示两条消息?

2 个答案:

答案 0 :(得分:1)

您可以将extra_tags用于来自邮件框架的邮件,以识别两条不同的邮件。

例如,对于登录错误

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

注册错误,

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

然后在模板中,根据标签,您将消息放入适当的格式

{# 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%}

Adding extra message tags

的更多参考资料

答案 1 :(得分:0)

您可以使用form.errors dict,如果表单无效,他会存储字段名称和错误消息,例如:

>>> print form.errors
{'password': [u'This field is required']}

然后您可以在模板中使用:

{% if 'username' in form.errors.keys %}
    <div class="error-message">
        Your username input error message!
    </div>
{% endif %}
{% if 'password' in form.errors.keys %}
    <div class="error-message">
        Your password input error message!
    </div>
{% endif %}

我能看到的唯一问题是输出信息,她有点难看=] 但是你可以使用另一种技巧来使它变得更漂亮,就像使用其他dicts存储漂亮的消息并通过字段名称来获取它......你做出了这个选择。

抱歉我的英文不好; /