样式化小部件实例
如果您想让一个小部件实例看起来与另一个不同,您需要在小部件对象被实例化并分配给表单字段时指定其他属性(并且可能在您的 CSS 文件中添加一些规则)。
https://docs.djangoproject.com/en/2.2/ref/forms/widgets/
为此,您可以在创建小部件时使用 Widget.attrs 参数:
class CommentForm(forms.Form):
name = forms.CharField(widget=forms.TextInput(attrs={'class': 'special'}))
url = forms.URLField()
comment = forms.CharField(widget=forms.TextInput(attrs={'size': '40'}))
您还可以在表单定义中修改一个小部件:
class CommentForm(forms.Form):
name = forms.CharField()
url = forms.URLField()
comment = forms.CharField()
name.widget.attrs.update({'class': 'special'})
comment.widget.attrs.update(size='40')
或者如果该字段没有直接在表单上声明(例如模型表单字段),您可以使用 Form.fields 属性:
class CommentForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['name'].widget.attrs.update({'class': 'special'})
self.fields['comment'].widget.attrs.update(size='40')
然后,Django 将在渲染输出中包含额外的属性:
>>> f = CommentForm(auto_id=False)
>>> f.as_table()
<tr><th>Name:</th><td><input type="text" name="name" class="special" required></td></tr>
<tr><th>Url:</th><td><input type="url" name="url" required></td></tr>
<tr><th>Comment:</th><td><input type="text" name="comment" size="40" required></td></tr>