为< input>django ModelForm字段的标签添加属性

olqngx59  于 2023-06-25  发布在  Go
关注(0)|答案(3)|浏览(150)

我有一个django模型,我使用ModelForm显示为表单。默认值在大多数情况下对我来说工作得很好。
然而,我希望我的html <input ...>标签有一个额外的属性,即我想包括一个placeholder属性,如下所示:

<input placeholder="{{field.label}}" ... />

什么是最简单的方法来添加此属性到我的html?据我所知,似乎我需要实现自己的过滤器来输出字段,但当我想做的只是让所有东西都保持原样,但添加一个额外的属性时,这似乎有点矫枉过正。

cetgtptt

cetgtptt1#

参见文档

class AuthorForm(ModelForm):
    class Meta:
        model = Author
        widgets = {
            'name': TextInput(attrs={'placeholder': 'name'}),
        }

您始终可以创建自己的小部件,它派生自TextInput并包含占位符属性,并使用小部件字典将字段Map到新小部件,而无需为每个字段指定占位符属性。

c90pui9n

c90pui9n2#

我个人比较喜欢用这个方法:

def __init__(self, *args, **kwargs):
    super(MyForm, self).__init__(*args, **kwargs)
    self.fields['email'].widget.attrs['placeholder'] = self.fields['email'].label or 'email@address.nl'

如果您还没有__init__,则需要更多的代码,但您不需要指定小部件。

xjreopfe

xjreopfe3#

下面是一个基于@Mark方法的Form类的可重用混合

from django.core.exceptions import ImproperlyConfigured

class PlaceholderMixin():
    def placeholder_setup(self):
        if not hasattr(self.Meta, 'placeholders'):
            raise ImproperlyConfigured('Meta class must have a placeholders dict')
        for field, placeholder in self.Meta.placeholders.items():
            self.fields[field].widget.attrs['placeholder'] = placeholder

要使用它,请将其添加到Form类并在 meta类中定义占位符:

class MyForm(forms.ModelForm, PlaceholderMixin):
    class Meta:
        model = MyModel
        fields = [ 'name', 'description', 'choices' ]
        placeholders = {
            'name': 'your name',
            'description': 'describe yourself'
        }
        
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.placeholder_setup()

相关问题