代码之家  ›  专栏  ›  技术社区  ›  NBajanca

如何将CSS类添加到Django内置表单

  •  2
  • NBajanca  · 技术社区  · 9 年前

    我正在使用 Django Built-in forms ,更确切地说是密码更改形式。

    它完美地工作,直到我希望它看起来像网站的其他部分(引导)。 我遵循了这种方法 answer 也就是继承类并自己构建一个新类:

    class PasswordChangeCustomForm(PasswordChangeForm):
        old_password = CharField(required=True,
                      widget=PasswordInput(attrs={
                        'class': 'form-control'}))
    
        new_password1 = CharField(required=True,
                      widget=PasswordInput(attrs={
                        'class': 'form-control'}))
    
        new_password2 = CharField(required=True,
                      widget=PasswordInput(attrs={
                        'class': 'form-control'}))
    

    但是重复这些代码让我很恼火。 form-control 到每个字段),而不重新写入每个字段?

    2 回复  |  直到 9 年前
        1
  •  4
  •   Dunatotatos    9 年前

    class PasswordChangeCustomForm(PasswordChangeForm):
        def __init__(self, user, *args, **kwargs):
            super(PasswordChangeCustomForm, self).__init__(user, *args, **kwargs)
            self.fields['old_password'].widget.attrs.update({'class': 'form-control'})
            self.fields['new_password1'].widget.attrs.update({'class': 'form-control'})
            self.fields['new_password2'].widget.attrs.update({'class': 'form-control'})
    

    特别适用于引导(所有字段都需要类 form-control )是 answer 来自@daniel roseman:

    class PasswordChangeCustomForm(PasswordChangeForm):
        def __init__(self, user, *args, **kwargs):
            super(PasswordChangeCustomForm, self).__init__(user,*args, **kwargs)
            for field in self.fields:
                self.fields[field].widget.attrs['class'] = 'form-control'
    
        2
  •  3
  •   Daniel Roseman    9 年前

    您可以将代码进一步,并自动更新所有小部件:

    super(PasswordChangeCustomForm, self).__init__(*args, **kwargs)
    for field in self.fields.values():
        field.widget.attrs['class'] = 'form-control'