表单字段的widget 参数

小部件

小部件是Django对HTML输入元素的表示。窗口小部件处理HTML的呈现,以及从与窗口小部件对应的GET / POST字典中提取数据。

指定小部件

无论何时在表单上指定字段,Django都将使用适合于要显示的数据类型的默认窗口小部件。要查找在哪个字段上使用哪个窗口小部件,请参阅有关内置字段类的文档 。

但是,如果要为字段使用不同的窗口小部件,则只需widget在字段定义上使用该参数即可。例如:

from django import forms

class CommentForm(forms.Form):
    name = forms.CharField()
    url = forms.URLField()
    comment = forms.CharField(widget=forms.Textarea)

这将指定一个带有注释的表单,该注释使用更大的Textarea 小部件,而不是默认TextInput小部件。

自定义窗口小部件有两种方法:每个窗口小部件实例和每个窗口小部件类。

样式小部件实例

在真实的Web页面上,您可能不希望每个小部件看起来都一样。您可能需要更大的注释输入元素,并且您可能希望“名称”小部件具有一些特殊的CSS类。也可以指定’type’属性以利用新的HTML5输入类型。为此,您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')

基本小部件类

基本窗口小部件类Widget,MultiWidget由所有内置窗口小部件子类化,可以作为自定义窗口小部件的基础。

Widget
classWidget(attrs = None)[来源]
此抽象类无法呈现,但提供了基本属性 attrs。您还可以render()在自定义小部件上实现或覆盖该 方法。

attrs
包含要在呈现的窗口小部件上设置的HTML属性的字典。

>>> from django import forms
>>> name = forms.TextInput(attrs={'size': 10, 'title': 'Your name'})
>>> name.render('name', 'A name')
'<input title="Your name" type="text" name="name" value="A name" size="10">'

如果为属性赋值True或赋值False,则它将呈现为HTML5布尔属性:

>>> name = forms.TextInput(attrs={'required': True})
>>> name.render('name', 'A name')
'<input name="name" type="text" value="A name" required>'
>>>
>>> name = forms.TextInput(attrs={'required': False})
>>> name.render('name', 'A name')
'<input name="name" type="text" value="A name">'
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值