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

标签 django django-crispy-forms

我在 django_crispy_forms 中使用 bootstrap3 作为默认模板包,并尝试渲染带有脆皮标签的表单:

{% 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')
            )
        )

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

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

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

最佳答案

当表单有验证错误时,我们使用 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)

然后我们使用 bootstrap 警报来显示所有消息,包括我们的一般错误,尽管您当然可以根据需要对其进行标记。

但是,如果您只想将错误移动到一个单独的块中,请将它们添加到您的请求上下文中:
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和样式来控制内联错误的显示。

关于django - 使用内联表单在 django-crispy-forms 中呈现字段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19094974/

相关文章:

python - Django 1.9 + sorl-thumbnail + memcached

python - Nginx、uwsgi、django 和上游在 get/post 上超时

Django-crispy-forms:为 AppendText 父 div 设置 CSS 类

Django migrate 和 makemigrate 自动 yes 提示

python - 使用动态 form_class 更新 View

python - Django 模型表单 : Seeding a FK related field in the form

jquery - django-autocomplete-light - 如何返回与模型主键不同的字段?

python - Django Crispy 表单拆分字段布局

python - 无法将 django 更新到最新版本

python - Django Crispy Forms 向 ModelFormSet 添加新的空表单