我刚刚了解到:
Form.error_css_class
Form.required_css_class
文档:https://docs.djangoproject.com/en/dev/ref/forms/api/#django.forms.Form.error_css_class
通过定义' error_css_class'和' required_css_class'在表格中
class MyForm(forms.Form):
error_css_class = 'error'
required_css_class = 'required'
name = forms.CharField(...)
我能做到:
<div class="field-wrapper {{ form.name.css_classes }}">
...
</div>
这将输出:
<div class="field-wrapper required">
...
</div>
但是我想在字段中添加其他类,例如我想添加&#39;文本名称&#39; css类为&#34; name&#34;领域。阅读文档,我认为它是可能的。
https://docs.djangoproject.com/en/dev/ref/forms/api/#django.forms.BoundField.css_classes
阅读完上述内容后,我试着做了
self.fields['name'].css_classes('name text')
这不起作用。我得到了
'CharField' object has no attribute 'css_classes'
我也试过
name = forms.CharField(css_classes='name text')
TypeError
__init__() got an unexpected keyword argument 'css_classes'
我知道我可以在字段小部件中添加额外的attr
self.fields['name'].widget.attrs['class'] = 'name text'
但我想将css类添加到字段包装器中。
我可以编写一个自定义模板标签...来检查字段名称/类型并返回适当的css类...但是如果有内置的东西......我希望保持我的模板清洁:-)。
每个字段的css类硬编码也不是一个选项..因为表单字段是动态的。
任何帮助将不胜感激。
答案 0 :(得分:6)
我想出了如何使用自定义的BoundField
来做到这一点from django.forms import forms
class CustomBoundField(forms.BoundField):
def css_classes(self, extra_classes=None):
# logic for determining css_classes has been omitted
extra_classes = ['name', 'text']
return super(CustomBoundField, self).css_classes(extra_classes=extra_classes)
在我的表格中,我覆盖 getitem
def __getitem__(self, name):
try:
field = self.fields[name]
except KeyError:
raise KeyError('Key %r not found in Form' % name)
return CustomBoundField(self, field, name)