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

时间:2013-09-23 00:12:09

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

我有一个名为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”%},但这也不起作用。有谁知道怎么做?

2 个答案:

答案 0 :(得分:4)

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

{{ field.errors.0 }}

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

答案 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 %}