【问题标题】:Custom Widget - How to correctly provide widget with args自定义小部件 - 如何正确地为小部件提供参数
【发布时间】:2012-09-05 12:26:47
【问题描述】:

如何正确地为自定义小部件提供 attrs?调用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'})

MyModel 看起来像这样:

class MyModel(models.Model):
    lockedFlag = models.BooleanField(default=False)

【问题讨论】:

    标签: django forms widget


    【解决方案1】:

    在我看来,传递给您的渲染方法的属性是来自字段而不是小部件的属性,尝试将您的打印语句更改为print self.attrs,这将获取您传递给小部件的构造函数。希望这有意义吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-27
      • 1970-01-01
      • 1970-01-01
      • 2019-05-13
      • 1970-01-01
      • 1970-01-01
      • 2014-06-24
      • 2012-09-05
      相关资源
      最近更新 更多