如何在一页显示多个Django消息?
在我的主页上,有一个登录表单和一个注册表单,我使用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
你可以使用 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 %}
我看到的唯一问题是输出的消息,看起来有点丑 =] 但你可以用其他方法让它更好看,比如使用其他字典来存储更好看的消息,然后通过字段名称来获取这些消息……这个选择在你。
*抱歉我的英语不好 ;/
9
你可以使用 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%}
更多信息可以参考 添加额外消息标签