使用内联表单呈现django-crispy-forms中的字段错误

时间:2013-09-30 13:02:46

标签: django django-crispy-forms

我正在使用bootstrap3作为django_crispy_forms中的默认模板包,并尝试使用crispy标签呈现表单:

{% crispy form %}

我的表单类具有以下帮助器属性:

class TheForm(forms.Form):
    adv_var = forms.CharField(label="variable", max_length=70)
    value = forms.FloatField()

    def __init__(self, *args, **kwargs):
        super(TheForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper()

        self.helper.form_method = 'post'
        self.helper.form_class = 'form-inline'
        self.helper.field_template = 'bootstrap3/layout/inline_field.html'

        self.helper.layout = Layout(
            'adv_var', 'value',
            ButtonHolder(
                Submit('submit', 'Start', css_class='button white')
            )
        )

发布有错误的表单时,即使我可以在视图中打印form._errors并查看错误列表,重新呈现模板也不会显示错误。

如果我将helper.field_template更改为另一个值(或删除它以设置默认值),则会在每个字段上方显示错误 - 但我不再显示内联显示。

如何使用django-crispy-forms在单独的div中显示此表单的所有错误?

2 个答案:

答案 0 :(得分:2)

当表单出现验证错误时,我们使用django.contrib.messages来推送一般错误字符串,并保留字段错误以进行内联呈现:

from django.contrib import messages
# ...
if not form.is_valid():
    messages.error(request, "Please correct the errors below and resubmit.")
    return render(request, template, context)

然后,我们使用引导程序警报来显示所有消息,包括我们的一般错误,但您当然可以将其标记为您想要的。

但是,如果您只想将错误移到单独的块中,请将它们添加到您的请求上下文中:

from django.contrib import messages
# ...
if not form.is_valid():
    context['form_errors'] = form.errors
    return render(request, template, context)

并在您的模板中:

{% crispy form %}
<div id='form-errors'>{{ form_errors }}</div>

然后,您可以使用crispy form's helper attributes和样式来控制内联错误的显示。

答案 1 :(得分:1)

可能更简单的方法是下一个因为它使用较少的进口......

..在观点中:

if request.method == 'POST':
    form = TheForm(request.POST)
    if form.is_valid():
        form.save()
        return redirect('url_name')
    else:
        form = TheForm()
    return render(request, 'form.html', {'form': form})

...并且仅以您需要的形式:

{% load crispy_forms_tags %}
{% crispy form %}

...其中&#39; url_name &#39;在urlpatterns(urls.py)中定义了模式的名称......这就是你真正需要的......

Crispy是一个非常聪明的系统。系统知道如何直观地显示表单错误。