4

我有一个名为 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 field in form|slice:":1" %} 但这也行不通。有人知道怎么做吗?

4

2 回答 2

7

您可以使用点符号来索引 django 模板中的列表:

{{ field.errors.0 }}

不过,请务必在执行此操作之前检查至少存在 1 个错误,否则您将收到 Index out of range 错误。

于 2013-09-23T00:30:13.873 回答
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 %}
于 2018-03-01T15:12:26.920 回答