假设我有一张表格
class SampleClass(forms.Form):
name = forms.CharField(max_length=30)
age = forms.IntegerField()
django_hacker = forms.BooleanField(required=False)
是否有一种方法为我定义css类在每个字段,这样我就可以使用jQuery基于类在我渲染的页面?
我希望不必手动构建表单。
假设我有一张表格
class SampleClass(forms.Form):
name = forms.CharField(max_length=30)
age = forms.IntegerField()
django_hacker = forms.BooleanField(required=False)
是否有一种方法为我定义css类在每个字段,这样我就可以使用jQuery基于类在我渲染的页面?
我希望不必手动构建表单。
当前回答
只需将类添加到表单,如下所示。
class UserLoginForm(forms.Form):
username = forms.CharField(widget=forms.TextInput(
attrs={
'class':'form-control',
'placeholder':'Username'
}
))
password = forms.CharField(widget=forms.PasswordInput(
attrs={
'class':'form-control',
'placeholder':'Password'
}
))
其他回答
下面是上面的一个变种,它将给所有字段相同的类(例如jquery漂亮的圆角)。
# Simple way to assign css class to every field
def __init__(self, *args, **kwargs):
super(TranslatedPageForm, self).__init__(*args, **kwargs)
for myField in self.fields:
self.fields[myField].widget.attrs['class'] = 'ui-state-default ui-corner-all'
下面是在类中声明字段后向小部件添加类定义的另一种解决方案。
def __init__(self, *args, **kwargs):
super(SampleClass, self).__init__(*args, **kwargs)
self.fields['name'].widget.attrs['class'] = 'my_class'
如果你想在模板(不是view.py或form.py)的表单字段中添加一个类,比如你想在不覆盖第三方应用程序视图的情况下修改它们,那么在Charlesthk回答中描述的模板过滤器是非常方便的。但是在这个答案中,模板过滤器覆盖了字段可能拥有的任何现有类。
我试图添加这作为一个编辑,但它被建议写作为一个新的答案。
因此,这里有一个模板标签,它尊重字段的现有类:
from django import template
register = template.Library()
@register.filter(name='addclass')
def addclass(field, given_class):
existing_classes = field.field.widget.attrs.get('class', None)
if existing_classes:
if existing_classes.find(given_class) == -1:
# if the given class doesn't exist in the existing classes
classes = existing_classes + ' ' + given_class
else:
classes = existing_classes
else:
classes = given_class
return field.as_widget(attrs={"class": classes})
只需将类添加到表单,如下所示。
class UserLoginForm(forms.Form):
username = forms.CharField(widget=forms.TextInput(
attrs={
'class':'form-control',
'placeholder':'Username'
}
))
password = forms.CharField(widget=forms.PasswordInput(
attrs={
'class':'form-control',
'placeholder':'Password'
}
))
这里有一个简单的方法来改变观点。在将它传递到模板之前,在视图中添加下面的内容。
form = MyForm(instance = instance.obj)
form.fields['email'].widget.attrs = {'class':'here_class_name'}