适用于所有字段的django应用小部件
有没有一种方法可以将css类应用于所有字段,而不是对每个字段执行以下操作。适用于所有字段的django应用小部件,django,django-forms,django-widget,django-widget-tweaks,Django,Django Forms,Django Widget,Django Widget Tweaks,有没有一种方法可以将css类应用于所有字段,而不是对每个字段执行以下操作。 forms.py class UserColorsForm(forms.ModelForm): class Meta: model = UserColors exclude = ('userid',) widgets = { 'text_color': forms.TextInput(attrs={'class': 'color'}),
forms.py
class UserColorsForm(forms.ModelForm):
class Meta:
model = UserColors
exclude = ('userid',)
widgets = {
'text_color': forms.TextInput(attrs={'class': 'color'}),
'background_color': forms.TextInput(attrs={'class': 'color'}),
... 10 more
}
尝试迭代表单字段:
css1 = {'class': 'color', }
css2 = {'class': 'nocolor', }
class UserColorsForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(UserColorsForm, self).__init__(*args, **kwargs)
for key, value in self.fields.iteritems():
if key in ['field1', 'field2', ...]: # You can define a
# subset of fields in a list to selectively apply css classes,
# OR just iterate and apply to everything
# (take out the if-else statement)
self.fields[key].widget.attrs.update(css1)
else:
self.fields[key].widget.attrs.update(css2)
这应该行得通
def __init__(self, *args, **kwargs):
super(UserColorsForm, self).__init__(*args, **kwargs)
for field in self.fields:
field.wiget.attrs['class'] = 'color'
要更新Mihai的答案,方法是:
def __init__(self, *args, **kwargs):
super(YourForm, self).__init__(*args, **kwargs)
for field in self.fields:
self.fields[field].widget.attrs.update({'class': 'myfieldclass'})
谢谢你的回复。这一个有效:对于self中的field:field.field.widget.attrs['class']='color',这很奇怪,我很确定建议的解决方案是正确的。会出现什么错误?self.fields会迭代字段的字符串值。在未绑定的字段上进行自迭代。我用的是django 1.7。这个对我不起作用。我为self.fields.keys()中的键做了
:self.fields[key].attrs.update({'class':'my class'})
,它成功了