django输入元素错误css类

Eey*_*ore 10 python django validation django-forms

我想知道如何在表单验证失败时将.error类添加到输入元素(注册应用程序).

Luc*_*uca 28

如果要将错误CSS类放置为表单输入窗口小部件(而不是其容器),可以从以下窗体派生窗体类:

class StyledErrorForm(forms.Form):
    def is_valid(self):
        ret = forms.Form.is_valid(self)
        for f in self.errors:
            self.fields[f].widget.attrs.update({'class': self.fields[f].widget.attrs.get('class', '') + ' error'})
        return ret
Run Code Online (Sandbox Code Playgroud)

  • 但是要注意一个小问题 - 这会覆盖在字段小部件声明中指定的任何类(即`attrs`).要简单地附加错误类,请使用此行代替(稍微可怕):`self.fields [f] .widget.attrs.update({'class':self.fields [f] .widget.attrs.get('class') ,'')+'错误'})` (3认同)

Ken*_*ntH 26

它现在很简单 - Django 1.2中的新功能

只需在表单类上添加一个属性,就可以了.这个功能在"1.2中的新内容"注释中的文档中提到,但您可以在django.forms.forms.BoundField.css_classes这里找到API参考的魔术,并举例说明:

class MyForm(forms.Form):
    required_css_class = "required"
    error_css_class = "error"
Run Code Online (Sandbox Code Playgroud)

  • 您需要使用{{form}}输出整个表单,如果您这样做,您将看到任何格式(p,表和列表)的类. (4认同)
  • 是的,添加`required_css_class`或`error_css_class`只会在使用`{{form}}`输出时影响输入标签和字段周围的容器元素.它确实*不*将类添加到输入字段本身(这是OP想要的).[以下是Django 1.7的文档](https://docs.djangoproject.com/en/1.7/ref/forms/api/#styling-required-or-erroneous-form-rows) (4认同)
  • Django 3.x:如果您重写 `clean()` 方法,并在该方法中通过 `self.add_error()` 添加错误(引发 `ValidationError()` 异常),则 `error_css_class` 被*忽略*。别问我为什么。在这种情况下,这个答案不起作用,而卢卡的答案却完美无缺。 (2认同)

小智 6

这可以通过您的模板完全完成.

您为要测试的每个表单域构建表单模板,您可以使用以下示例构造

<input type="text" class="reg-txt{% if form.fieldname.errors %} errors{% endif %}"/>
Run Code Online (Sandbox Code Playgroud)

这使您可以提供所需的界面,而无需修改视图和django表单代码.

  • 是否可以在表单或小部件级别上执行任何操作?这似乎相当冗长,我想在每个无效的输入字段,textarea上选择此错误类,选择... (5认同)