指定 Widget 的 class
Specify Widget's class
我有一个自定义表单,其中包含一个使用自定义小部件的字段。我需要设置widget的class,目前只能这样设置:
class DesignCampaignForm(ModelForm):
brand_logo = FileField(widget=ImagePreviewWidget)
brand_logo.widget.attrs['class'] = 'image-preview'
这意味着对于像这样声明的每个小部件,我需要两行,并且一直重复 class - 不是很干。
有没有办法在小部件本身中指定小部件 class?我一直无法在 documentation.
中找到它
如果您希望 class 在小部件的所有实例中都存在,您可以覆盖(或修改)小部件的 render
方法:
class CustomImagePreviewWidget(ImagePreviewWidget):
def render(self, name, value, attrs={}):
attrs['class'] = 'image-preview'
return super(CustomImagePreviewWidget, self).render(name, value, attrs)
然后在您的表单中使用 CustomImagePreviewWidget
。
再看一下,您也可以在小部件的 __init__
方法中执行此操作:
class CustomImagePreviewWidget(ImagePreviewWidget):
def __init__(self, attrs=None):
super(CustomImagePreviewWidget, self).__init__(attrs)
self.attrs['class'] = 'image-preview'
我有一个自定义表单,其中包含一个使用自定义小部件的字段。我需要设置widget的class,目前只能这样设置:
class DesignCampaignForm(ModelForm):
brand_logo = FileField(widget=ImagePreviewWidget)
brand_logo.widget.attrs['class'] = 'image-preview'
这意味着对于像这样声明的每个小部件,我需要两行,并且一直重复 class - 不是很干。
有没有办法在小部件本身中指定小部件 class?我一直无法在 documentation.
中找到它如果您希望 class 在小部件的所有实例中都存在,您可以覆盖(或修改)小部件的 render
方法:
class CustomImagePreviewWidget(ImagePreviewWidget):
def render(self, name, value, attrs={}):
attrs['class'] = 'image-preview'
return super(CustomImagePreviewWidget, self).render(name, value, attrs)
然后在您的表单中使用 CustomImagePreviewWidget
。
再看一下,您也可以在小部件的 __init__
方法中执行此操作:
class CustomImagePreviewWidget(ImagePreviewWidget):
def __init__(self, attrs=None):
super(CustomImagePreviewWidget, self).__init__(attrs)
self.attrs['class'] = 'image-preview'