Django 自定义小部件-如何正确地为小部件提供参数
如何正确地提供带有属性的自定义小部件?调用Django 自定义小部件-如何正确地为小部件提供参数,django,forms,widget,Django,Forms,Widget,如何正确地提供带有属性的自定义小部件?调用print attrs仅输出以下内容: attrs in LockFlagWidget are: {'id': u'id_lockedFlag'} 鉴于我希望: attrs in LockFlagWidget are: {'id': u'id_lockedFlag', 'size': u'80} 我编写了一个自定义小部件,如下所示: class LockFlagWidget(forms.widgets.Widget): def render
print attrs
仅输出以下内容:
attrs in LockFlagWidget are:
{'id': u'id_lockedFlag'}
鉴于我希望:
attrs in LockFlagWidget are:
{'id': u'id_lockedFlag', 'size': u'80}
我编写了一个自定义小部件,如下所示:
class LockFlagWidget(forms.widgets.Widget):
def render(self, name, value, attrs=None):
if value is None:
value = ''
print "attrs in LockFlagWidget are:"
print attrs
staticURL = getattr(settings, 'STATIC_URL')
if value != '':
if value == True:
return mark_safe(u"<img src=\"" + staticURL +
"lock/img/lock_closed.ico\"/>"
+ "<span> - Is locked</span>")
else:
return mark_safe(u"<img src=\"" + staticURL +
"lock/img/lock_open.ico\"/>"
+ "<span> - Is not locked</span>")
class LockForm(forms.ModelForm):
class Meta:
model = MyModel
def __init__(self, *args, **kwargs):
super(LockForm, self).__init__(*args, **kwargs)
self.fields['lockedFlag'].widget = LockFlagWidget(attrs={'size':'80'})
class MyModel(models.Model):
lockedFlag = models.BooleanField(default=False)
MyModel
如下所示:
class LockFlagWidget(forms.widgets.Widget):
def render(self, name, value, attrs=None):
if value is None:
value = ''
print "attrs in LockFlagWidget are:"
print attrs
staticURL = getattr(settings, 'STATIC_URL')
if value != '':
if value == True:
return mark_safe(u"<img src=\"" + staticURL +
"lock/img/lock_closed.ico\"/>"
+ "<span> - Is locked</span>")
else:
return mark_safe(u"<img src=\"" + staticURL +
"lock/img/lock_open.ico\"/>"
+ "<span> - Is not locked</span>")
class LockForm(forms.ModelForm):
class Meta:
model = MyModel
def __init__(self, *args, **kwargs):
super(LockForm, self).__init__(*args, **kwargs)
self.fields['lockedFlag'].widget = LockFlagWidget(attrs={'size':'80'})
class MyModel(models.Model):
lockedFlag = models.BooleanField(default=False)
在我看来,传递到呈现方法中的属性是字段中的属性,而不是小部件,请尝试将打印语句更改为
print self.attrs
,这将拾取传递到小部件构造函数中的属性。希望这有意义