django:如何只访问form.errors中的第一条错误消息?

问题描述 投票:1回答:2

我有一个名为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 django-templates django-views django-forms
2个回答
4
投票

您可以使用点表示法在django模板中索引列表:

{{ field.errors.0 }}

确保在执行此操作之前检查至少有1个错误,否则您将获得索引超出范围错误。


0
投票

采取模板标签路线。

这是一个示例模板标记:

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 %}
© www.soinside.com 2019 - 2024. All rights reserved.