django:如何只访问form.errors中的第一条错误消息?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django:如何只访问form.errors中的第一条错误消息?相关的知识,希望对你有一定的参考价值。
我有一个名为Users的模型,我有一个名为UsersForm的模型表单。在我的views.py中,我创建了一个UsersForm版本,就像这样
form = UsersForm()
if reqest.method == POST:
form = UsersForm(request.POST)
if form.is_valid():
form.save()
c = {}
c.update(csrf(request))
c.update({'form':form})
return render_to_response('home_page.html', c)
现在,我的home_page.html是这样的:
<html>
<body>
<form method="post" action="">{% csrf_token %}
{{ form }}
<input type="submit" value="Register"/>
</form>
{% if form.errors %}
{% for field in form %}
<p> {{field.errors}} </p>
{% endfor %}
{% endif %}
</body>
</html>
所以,我想要的是,我想只显示{{field.errors}}中的第一个错误。我在想的是:
{% if form.errors %}
{% for field in form %}
<p> {{field.errors}} </p> {{ break}}
{% endfor %}
{% endif %}
但是django模板语言没有中断,对吧?我也尝试过考虑使用{%for form in form | slice:“:1”%},但这也不起作用。有人知道怎么做吗?
答案
您可以使用点表示法在django模板中索引列表:
{{ field.errors.0 }}
确保在执行此操作之前检查至少有1个错误,否则您将获得索引超出范围错误。
另一答案
采取模板标签路线。
这是一个示例模板标记:
from django.template.defaulttags import register
@register.filter(name='show_error')
def show_error(dictionary):
try:
return dictionary.values()[0][0]
except (TypeError,IndexError,AttributeError):
return 'tip: try again'
并在您的模板中使用它,如下所示:
{% if form.errors %}{{ form.errors|show_error }}</span>{% endif %}
以上是关于django:如何只访问form.errors中的第一条错误消息?的主要内容,如果未能解决你的问题,请参考以下文章
Django 将自定义表单错误添加到 form.errors