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 表单?

Django 将自定义表单错误添加到 form.errors

如何从 django 中的表单错误属性中获取值

Django form.errors 未显示在模板中

django form.as_table form.errors 渲染成行,不弹出

django-form.errors和上传文件