1

在我的主页上,我有一个登录表单和注册表单,我使用 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() 失败后,刷新页面会导致弹出框说重新提交确认,我不想要这个,所以我使用第二种方法。

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

4

2 回答 2

8

您可以使用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%}

更多参考添加额外的消息标签

于 2013-02-22T08:23:52.253 回答
0

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

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

我能看到的唯一问题是输出消息,她有点丑=] 但是你可以使用其他技巧来使它更漂亮,比如使用其他字典来存储漂亮的消息并通过字段名称获取他.. .你做出这个选择。

*对不起,我的英语不好 ;/

于 2013-02-22T06:15:20.993 回答