【问题标题】:django how to access first error in a list of error messagesdjango如何访问错误消息列表中的第一个错误
【发布时间】:2013-09-30 10:18:52
【问题描述】:

假设我有一个名为 form 的表单,如果存在错误消息,我只想在屏幕上显示第一条错误消息。我做了一些研究,显然你可以通过在模板中输入来访问第一条错误消息。

{{ form.errors.0 }}

但它似乎对我不起作用,它不显示任何内容。如何制作我的模板,以便在出现表单错误时只显示第一条错误消息?这是我尝试过的。

<html>
    <body>

    <form method="post" action="">{% csrf_token %}
        {{ form }}
    <input type="submit" value="Register"/>
    </form>

    {% if form.errors %}
            {{ form.errors.0 }}
        {% endif %}
    </body>
</html>

所以,我想要的是,我只想在 {{form.errors}} 中显示第一个错误。 请注意,当我更改时

{{ form.errors.0 }}

{{ form.errors }}

它确实显示了所有错误,但是,我只想显示一个错误,只是第一个错误消息。那么,知道为什么我的点符号不起作用吗?

【问题讨论】:

    标签: django django-forms django-templates django-views django-errors


    【解决方案1】:

    form.errors 不是字典,至少根据 StackOverflow 中的其他相关问题:

    django accessing errors

    django: how to access only first error message in form.errors?

    如果你真的只需要得到第一个错误(记住所有字段错误会一起出现),你可以尝试转换为值然后得到第一个项目,比如:

    {{form.errors.values.0}}
    

    {{form.errors.items.0}}
    

    这一秒将返回一个带有标签和错误消息的元组。

    【讨论】:

    • 好的太好了.. 所以 {{ form.errors }} 显示该字段,然后显示错误消息。例如,如果用户未填写用户名字段,则会显示“用户名 - 此字段为必填项”。但是当我执行 {{ form.errors.items.0 }} 时,它只会显示错误消息。有没有办法显示字段名称?我知道元组返回错误消息但元组看起来不太好,它看起来像“('用户名',[u'这个字段是必需的。'])”有什么办法可以改变它的外观吗?另外,我可以对您从哪里学习 {{ form.errors.values.0}} 表示赞吗?
    • 哦,好吧,我所做的是 {% if form.errors %} {% for errors in form.errors %} {% if forloop.counter == 1 %} {{ errors }} {% endif %} {% endfor %} {{ form.errors.values.0 }} {% endif %}.. 这样,它会显示“用户名 - 此字段是必需的”.. 但是,是的,非常感谢!如果你能给我一个链接到你从哪里学习 {{form.errors.values.0}} 和 {{form.errors.items.0}} 也很好:)
    • 我都试过了,因为这是一个扩展的字典:github.com/django/django/blob/master/django/forms/utils.py#L41 当你不带方法调用时,它会在这个“as_ul”中打开,看看 str 方法跨度>
    • 啊,好吧,所以我可以改变那个 str 方法,对吧?好的完美,谢谢!另外,您说“当您没有方法调用时”.. 没有方法调用什么?
    • {{ form.errors }} 你默认调用 str 方法,{{form.errors.0}} 也是。但是 {{form.errors.copy}},例如,您调用 dict 副本,然后调用 ErrorDict 类中的方法。
    猜你喜欢
    • 2013-09-27
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多